教你用Python遍歷指定目錄下的所有文件以及文件的過濾


       寫程序我們經常會遇到需要遍歷某一個目錄下的所有文件這個操作,之前也寫過很多用java實現的。但是java里面只能獲取當前目錄下列表,然后需要循環判斷哪些是目錄,哪些是文件,然后再進行文件夾的循環遍歷,可以說相當麻煩。然而python有現成的庫,只需要2個循環就可以搞定。

 

       代碼如下,我們使用os.walk()方法來獲取所有文件。

  os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 輸出在文件夾中的文件名通過在樹中游走,向上或者向下。

  關於os的更多操作可以通過這個鏈接查看:http://www.runoob.com/python3/python3-os-file-methods.html

import os

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)#合並成一個完整路徑
            result.append(apath)

    return result

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']

 

  我們已經找到了所有的txt文件,是不是很方便那?大家也來試試吧。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM