许多次需要用python来遍历目录下文件, 这一次就整理了记录在这里。
随实际工作,不定期更新。
1 import os 2 3 class FileTraversal: 4 5 def __init__(self, rootpath): 6 7 self.rootpath = rootpath 8 9 #从顶至底的遍历(在剪短的代码里,我比较喜欢这清晰的变量名) 10 self.tracersal_from_top_to_down = True 11 12 #遍历发生错误的时候的回调函数 13 #函数参数为一个OSError类型参数 14 #文件名会作为错误参数的一个属性 , 如 error.filename 15 self.on_error_func = None 16 17 #是否变量链接文件(如:软链接、硬链接、windows上的快捷方式) 18 self.follow_links = False 19 20 ‘‘‘ 21 设置遍历顺序 22 ‘‘‘ 23 def setTopToDown(self, from_top_to_dowm=True): 24 self.tracersal_from_top_to_down = from_top_to_dowm 25 return self 26 ‘‘‘ 27 设置错误回调函数 28 ‘‘‘ 29 def setErrorFunc(self, err_func=None): 30 self.on_error_func = err_func 31 return self 32 ‘‘‘ 33 设置是否遍历连接文件 34 ‘‘‘ 35 def setFollowLinks(self, follow_links = False): 36 self.follow_links = follow_links 37 return self 38 39 ‘‘‘ 40 获取迭代器 41 ‘‘‘ 42 def getGenerator(self): 43 return os.walk(self.rootpath, self.tracersal_from_top_to_down, self.on_error_func, self.follow_links) 44 45 ‘‘‘ 46 获取所有文件 47 @param absolute_path: 是否返回绝对路径,或者仅仅文件名 48 ‘‘‘ 49 def getFiles(self,absolute_path=True): 50 files = [] 51 for parent,dirnames,filenames in self.getGenerator(): #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字 52 for file in filenames: 53 filepath = os.path.join(parent,file) 54 files.append( filepath if absolute_path else file) 55 return files 56 57 ‘‘‘ 58 获取当前目录下所有的文件(不递归遍历) 59 @ 60 ‘‘‘ 61 def getThisLevelFiles(self,absolute_path=True): 62 files = [] 63 all_in_dir = os.listdir(self.rootpath) 64 for file in all_in_dir: 65 filepath = os.path.join(self.rootpath, file) 66 if not os.path.isdir(filepath): 67 files.append(filepath if absolute_path else file) 68 return files
一般用法如下:
1 traversal = FileTraversal("/home/user/testdir") 2 traversal.setTopToDown(False).setErrorFunc(err_foo).setFollowLinks(True) #不设置,直接使用默认参数亦可 3 files = traversal.getFiles() 4 # do something with files ....
源文件: FileTraversal.py
时间: 2024-10-20 08:39:07