簡單來說
在使用os.walk的時候
有些子目錄是不想讀取要排除的
目前有找到兩個方法
第一種
import os
for root, dirs, files in os.walk(a):
if '目錄名稱' in dirs:
dirs.remove('目錄名稱')
第二種
import os
exclude = set([目錄名稱])
for root, dirs, files in os.walk(top, topdown=True):
dirs[:] = [d for d in dirs if d not in exclude]
第二種最後一行不懂那個dirs[:]和d為什麼在for前面 雖然沒有就無法執行...
這兩種原理都相同都是對dirs進行修改
藉此讓os.walk不找排除的目錄
但我發現一個問題
假設目錄列表是這樣
root
作者:
froce (froce)
2019-08-06 07:06:00搞懂os.walk傳回你就會寫了。你可以用root和dirs的組合去篩選。然後第二種那個叫list comprehension,在python會是很常見的寫法。
是指os.path.join?好像沒用 至少沒辦法用上面這兩種方法改
作者:
djshen (djshen)
2019-08-06 11:33:00資料結構 演算法沒學好 這種問題問不完的
root是根目錄dirs是子目錄的名稱 用上面的方法只能修改dirsjoin會跑出list不是str
root和files組起來就是完整路徑了吧。你的問題更簡單,直接比root就好了你先把root, dirs, files印出來看看os.walk的回傳值是什麼東西吧。
作者:
art1 (人,原來不是人)
2019-08-06 22:34:00那個 r 是 raw 的意思,意思是原始字串,可以避免需要逸出的情況
作者:
s860134 (s860134)
2019-08-07 09:39:00這樣只會複製貼上的學法問題問不完連 for 迴圈都不會自己寫你的需求用 os.path 下面的function 就能達成
呃...找不到你說的東西 話說我也只會修改和模仿而已 所以只要有範例拿來用就行了 如果沒有或實在太難懂就只能乾脆的放棄 只是還是會學一點 不然連改都沒辦法...不過有個失敗的代碼用的函數很有用 要是當初知道 就不會找程式找到爆掉了 結果居然在放棄找之後 偶然發現我平常用的程式有這功能 讓我吐血啊...