许多次需要用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