寫程序我們經常會遇到需要遍歷某一個目錄下的所有文件這個操作,然而python有現成的庫,只需要2個循環就可以搞定。
1 import os 2 3 def all_path(dirname): 4 5 result = []#所有的文件 6 7 for maindir, subdir, file_name_list in os.walk(dirname): 8 9 print("1:",maindir) #當前主目錄 10 print("2:",subdir) #當前主目錄下的所有目錄 11 print("3:",file_name_list) #當前主目錄下的所有文件 12 13 for filename in file_name_list: 14 apath = os.path.join(maindir, filename)#合並成一個完整路徑 15 result.append(apath) 16 17 return result 18 19 print(all_path("E:\myTest"))
程序運行結果如下:
['E:\\myTest\\kuang3.png', 'E:\\myTest\\txt1.txt', 'E:\\myTest\\txt2.txt', 'E:\\myTest\\YYGB1.png', 'E:\\myTest\\YYGB2.png', 'E:\\myTest\\test1\\txt11.txt', 'E:\\myTest\\test2\\txt21.txt', 'E:\\myTest\\test2\\txt22.txt' ]
當然現在我們是獲取了所有的文件,如果我們只想要某一個類型的文件,那么也很簡單,寫個過濾就好了。所以修改后的代碼如下:
import os filter=[".txt"] #設置過濾后的文件類型 當然可以設置多個類型 def all_path(dirname): result = []#所有的文件 for maindir, subdir, file_name_list in os.walk(dirname): # print("1:",maindir) #當前主目錄 # print("2:",subdir) #當前主目錄下的所有目錄 # print("3:",file_name_list) #當前主目錄下的所有文件 for filename in file_name_list: apath = os.path.join(maindir, filename)#合並成一個完整路徑 ext = os.path.splitext(apath)[1] # 獲取文件后綴 [0]獲取的是除了文件名以外的內容 if ext in filter: result.append(apath) return result print(all_path("E:\myTest")) #運行結果 #['E:\\myTest\\txt1.txt', 'E:\\myTest\\txt2.txt', 'E:\\myTest\\test1\\txt11.txt', 'E:\\myTest\\test2\\txt21.txt', 'E:\\myTest\\test2\\txt22.txt']
或者
def list_files(self, path):
files = [] list_dir = os.walk(path) for maindir, subdir, all_file in list_dir: for filename in all_file: apath = os.path.join(maindir, filename) if apath.endswith('.txt'): files.append(apath)