许多次需要用python来遍历目录下文件, 这一次就整理了记录在这里。

随实际工作,不定期更新。

 import os

 class FileTraversal:

     def __init__(self, rootpath):

         self.rootpath = rootpath

         #从顶至底的遍历(在剪短的代码里,我比较喜欢这清晰的变量名)
         self.tracersal_from_top_to_down = True

         #遍历发生错误的时候的回调函数
         #函数参数为一个OSError类型参数
         #文件名会作为错误参数的一个属性 , 如 error.filename
         self.on_error_func = None

         #是否变量链接文件(如:软链接、硬链接、windows上的快捷方式)
         self.follow_links = False

     '''
         设置遍历顺序
     '''
     def setTopToDown(self, from_top_to_dowm=True):
         self.tracersal_from_top_to_down = from_top_to_dowm
         return self
     '''
         设置错误回调函数
     '''
     def setErrorFunc(self, err_func=None):
         self.on_error_func = err_func
         return self
     '''
         设置是否遍历连接文件
     '''
     def setFollowLinks(self, follow_links = False):
         self.follow_links = follow_links
         return self

     '''
         获取迭代器
     '''
     def getGenerator(self):
         return os.walk(self.rootpath, self.tracersal_from_top_to_down, self.on_error_func, self.follow_links)

     '''
         获取所有文件
         @param absolute_path: 是否返回绝对路径,或者仅仅文件名
     '''
     def getFiles(self,absolute_path=True):
         files = []
         for parent,dirnames,filenames in self.getGenerator():    #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
             for file in filenames:
                 filepath = os.path.join(parent,file)
                 files.append( filepath if absolute_path else file)
         return files

     '''
         获取当前目录下所有的文件(不递归遍历)
         @
     '''
     def getThisLevelFiles(self,absolute_path=True):
         files = []
         all_in_dir = os.listdir(self.rootpath)
         for file in all_in_dir:
             filepath = os.path.join(self.rootpath, file)
             if not os.path.isdir(filepath):
                 files.append(filepath if absolute_path else file)
         return files

一般用法如下:

 traversal = FileTraversal("/home/user/testdir")
 traversal.setTopToDown(False).setErrorFunc(err_foo).setFollowLinks(True) #不设置,直接使用默认参数亦可
 files = traversal.getFiles()
 # do something with files ....

源文件: FileTraversal.py

Python遍历文件夹的更多相关文章

  1. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  2. python遍历文件夹下的文件

    在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...

  3. Python 遍历文件夹清理磁盘案例

    import os suffix_name_list = [".pdb", ".ilk"] def find_file(path): # 遍历文件夹 for i ...

  4. python 遍历文件夹下的所有文件

    基础 import os # 遍历文件夹 def walkFile(file): for root, dirs, files in os.walk(file): # root 表示当前正在访问的文件夹 ...

  5. Python遍历文件夹和读写文件的方法

    需 求 分 析 1.读取指定目录下的所有文件2.读取指定文件,输出文件内容3.创建一个文件并保存到指定目录 实 现 过 程 Python写代码简洁高效,实现以上功能仅用了40行左右的代码~ 昨天用Ja ...

  6. python遍历文件夹中所有文件夹和文件,os.walk

    python中可以用os.walk来遍历某个文件夹中所有文件夹和文件. 例1: import os filePath = 'C:/Users/admin/Desktop/img' for dirpat ...

  7. python 遍历文件夹

    import os import os.path rootdir = “d:\data” # 指明被遍历的文件夹 for parent,dirnames,filenames in os.walk(ro ...

  8. python 遍历文件夹中所有文件

    '''使用walk方法递归遍历目录文件,walk方法会返回一个三元组,分别是root.dirs和files. 其中root是当前正在遍历的目录路径:dirs是一个列表,包含当前正在遍历的目录下所有的子 ...

  9. Python遍历文件夹枚举所有文件类型

    >>> import os >>> def enumfiles(path, dest): files = os.listdir(path) for f in fil ...

随机推荐

  1. 从双十一战报看传统大家电如何O2O转型?

    说到大家电电商,大家都会想起天猫.京东.苏宁易购.国美在线等各大电商平台,他们这一次的双十一又实现了较大规模的增长,而各大电商平台家电辉煌战绩的背后实际上是各大品牌家电的成功. 格力今年双十一当天创下 ...

  2. GridView和DATAGRID前后台查询用法的比较

    Grideview前台: <DIV class="mainDiv" id="GridWidth"> <ASP:GridView id=&quo ...

  3. 关于页面查询多数据查询问题(foreach)

    最近纠结的一个问题,就是页面综合查询总报错,之前用过传参用list传就没问题,但现在用map总是报错,缓释直接贴图吧,希望对遇到问题的朋友有帮助页面传来参数,之前是 这样写的,直接将拿来的数据封装成一 ...

  4. Lookup 组件异常

    Lookup组件有两个数据源,一个是上流组件的输出,一个是组件lookup的数据源,这个数据源是在Connection选项卡中进行配置.在开发package的过程中,我发现一个异常,当Lookup数据 ...

  5. 学习WPF——使用Font-Awesome图标字体

    图标字体介绍 在介绍图标字体之前,不得不介绍图标格式ICON ICON是一种图标格式,我们操作系统中各种应用程序都包含一个图标 比如QQ程序的图标是一个可爱的企鹅,我的电脑是一个显示器图标 ----- ...

  6. Mysql存储过程语法

    一口气弄完了! 一.条件语句if-then-else: create procedure demo_1(in param int) begin declare var int; ; then inse ...

  7. C#多线程之旅(3)——线程池

    v博客前言 先交代下背景,写<C#多线程之旅>这个系列文章主要是因为以下几个原因:1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的,如果没有用好,容易造成很 ...

  8. 在MVC5和webAPI下是用Autofac依赖注入

    很多书本中都提到依赖注入,控制反转等概念,这些都是为了实现松耦合层.组件和类目的. 常见的是使用Repository类分离Controller和Model的直接联系.而为了解除Repository类和 ...

  9. 哈夫曼树(二)之 C++详解

    上一章介绍了哈夫曼树的基本概念,并通过C语言实现了哈夫曼树.本章是哈夫曼树的C++实现. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载 ...

  10. nodemailer实现node发送邮件

    作为一个前端er,利用node独立做一些全栈小项目,是很有效率和必要的. 需要: 做一个活动报名页面,用户填好的表单需要被工作人员收到,一想到把数据存数据库,还需要给工作人员写一个管理页面就觉得很麻烦 ...