摘要:可以用來設置當便利出現(xiàn)錯誤的處理函數(shù)該函數(shù)接受一個的實例作為參數(shù),設置為空則不作處理。返回的是一個個元素的元組,分別表示遍歷的路徑名,該路徑下的目錄列表和該路徑下文件列表。
os.walk目錄遍歷
每個月都有那么幾天想劃水,又到劃水的日子了,今天分享的是剛在處理遍歷目錄相關用到的相關方法。
os.walkos.walk的參數(shù)如下:
os.walk(top, topdown=True, onerror=None, followlinks=False)
其中:
top是要遍歷的目錄。
topdown是代表要從上而下遍歷還是從下往上遍歷。
onerror可以用來設置當便利出現(xiàn)錯誤的處理函數(shù)(該函數(shù)接受一個OSError的實例作為參數(shù)),設置為空則不作處理。
followlinks表示是否要跟隨目錄下的鏈接去繼續(xù)遍歷,要注意的是,os.walk不會記錄已經遍歷的目錄,所以跟隨鏈接遍歷的話有可能一直循環(huán)調用下去。
os.walk返回的是一個3個元素的元組 (root, dirs, files) ,分別表示遍歷的路徑名,該路徑下的目錄列表和該路徑下文件列表。注意目錄列表和文件列表不是具體路徑,需要具體路徑(從root開始的路徑)的話可以用 os.path.join(root,dir) 和 os.path.join(root,dir) 。
例子假設現(xiàn)在存在如下的文件和目錄結構:
? test_os_walk git:(master) ? tree . ├── a.py ├── b.py ├── c.py ├── dir1 │?? ├── dir4 │?? │?? ├── g.py │?? │?? └── h.py │?? ├── dirx │?? │?? ├── diry │?? │?? │?? └── k.py │?? │?? └── z.py │?? ├── e.py │?? ├── f.py │?? └── g.py ├── dir2 │?? ├── dira │?? │?? └── dirb │?? │?? └── dirc │?? │?? └── aha.py │?? ├── k.py │?? ├── l.py │?? └── m.py └── dir3 ├── dir5 │?? └── z.py ├── x.py └── y.py 10 directories, 17 files測試topdown
當我用 os.walk 遍歷這個目錄時,程序和輸出如下:
import os path = "/Users/nisen/Projects/python_advanced_class/test/test_os_walk" for root, dirs, files in os.walk(path, True): print "root: %s" % root print "dirs: %s" % dirs print "files: %s" % files print ""
結果如下,從root的路徑可以看出遍歷是自上而下的:
? test git:(master) ? python test11.py root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk dirs: ["dir1", "dir2", "dir3"] files: ["a.py", "b.py", "c.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1 dirs: ["dir4", "dirx"] files: ["e.py", "f.py", "g.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4 dirs: [] files: ["g.py", "h.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx dirs: ["diry"] files: ["z.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry dirs: [] files: ["k.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2 dirs: ["dira"] files: ["k.py", "l.py", "m.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira dirs: ["dirb"] files: [] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb dirs: ["dirc"] files: [] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc dirs: [] files: ["aha.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3 dirs: ["dir5"] files: ["x.py", "y.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5 dirs: [] files: ["z.py"]
而當設置os.walk的topdown為False時,結果如下, 可以看出他是自上而下遍歷的:
? test git:(master) ? python test11.py root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4 dirs: [] files: ["g.py", "h.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry dirs: [] files: ["k.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx dirs: ["diry"] files: ["z.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1 dirs: ["dir4", "dirx"] files: ["e.py", "f.py", "g.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc dirs: [] files: ["aha.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb dirs: ["dirc"] files: [] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira dirs: ["dirb"] files: [] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2 dirs: ["dira"] files: ["k.py", "l.py", "m.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5 dirs: [] files: ["z.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3 dirs: ["dir5"] files: ["x.py", "y.py"] root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk dirs: ["dir1", "dir2", "dir3"] files: ["a.py", "b.py", "c.py"]運行時修改遍歷目錄
當topdown設置為True時,可以在處理時修改返回的 dirs 列表,這樣可以遍歷下面的目錄時會根據(jù)修改后的 dirs 來遍歷。比如下面的例子,在遍歷的時候不把"CSV"目錄包括在內:
import os from os.path import join, getsize for root, dirs, files in os.walk("python/Lib/email"): print root, "consumes", print sum(getsize(join(root, name)) for name in files), print "bytes in", len(files), "non-directory files" if "CVS" in dirs: dirs.remove("CVS") # don"t visit CVS directories參考資料
https://docs.python.org/2/lib...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44309.html
摘要:報告這錯誤后,繼續(xù)或者拋出終止。調用方式當前遍歷的目錄目錄下的目錄列表目錄下的文件列表在進行文件內指針重置的時候,除了基礎篇文件部分介紹的絕對定位外,通過模塊還可以實現(xiàn)相對定位。 Python的目錄操作主要依賴于os和 shutil 模塊. Python目錄操作 新建目錄 os.mkdir(./test/) #在當前目錄下新建名為test的目錄,存在則報錯 新建多級目錄 os.make...
摘要:刪除刪除只能刪除文件,若為目錄則報錯若文件正在使用,下會直接報錯,下會在目錄表中刪除記錄,但文件還在與一樣的作用刪除目錄,目錄必須為空,否則報錯遞歸刪除空目錄刪除整個目錄不管此目錄下有多少目錄和文件新建新建新建文件夾,若倒數(shù)第二層文件夾不存 刪除 # ==================刪除================== # 只能刪除文件,若為目錄則報錯 # 若文件正在使用,Wi...
摘要:單元素元祖這是整數(shù)這才是元祖也許這兩行,你們當時疑惑過,并且現(xiàn)在也都知道了,當然重點并不在這里。。雖然我水平很垃圾,但是我知道匿名函數(shù)有一種執(zhí)行方式叫做自執(zhí)行。看吧,這就是版的匿名函數(shù)自執(zhí)行方法。 單元素元祖: a = (1) # 這是整數(shù)1 a = (1,) # 這才是元祖 也許這兩行,你們當時疑惑過,并且現(xiàn)在也都知道了,當然重點并不在這里。。 我無聊的時候想過,為什么單...
摘要:像但創(chuàng)建的所有文件夾需要包含子文件夾。如果子文件夾不能被成功刪除,將拋出。是一個字符串的路徑在中子文件夾的列表不包括。如果參數(shù)為或者指定一個的將比它的任何子文件夾的先產生自上而下。 Python的標準庫中的os模塊包含普遍的操作系統(tǒng)功能。這個模塊的作用主要是提供與平臺無關的功能。也就是說os模塊能夠處理平臺間的差異問題,使得編寫好的程序無需做任何改動就能在另外的平臺上運行。當然,這個模...
摘要:在日常的學習生活工作中,我們有時會遇到需要合并文件的需求。模塊的相關參考文檔網址為本文將介紹如何利用來完成文件的合并。 ??在日常的學習生活工作中,我們有時會遇到需要合并PDF文件的需求。這時,我們可以利用相關的PDF軟件(如Adobe Acrobat Reader DC)來完成這個任務,幸運的是,Python也為我們提供了這方面的處理模塊PyPDF2, 借用它,我們可以利用Pytho...
閱讀 2674·2021-11-18 10:02
閱讀 3440·2021-09-22 15:50
閱讀 2368·2021-09-06 15:02
閱讀 3588·2019-08-29 16:34
閱讀 1753·2019-08-29 13:49
閱讀 1282·2019-08-29 13:29
閱讀 3648·2019-08-28 18:08
閱讀 2954·2019-08-26 11:52