[問題] 排除os.walk中的「路徑」

作者: s4028600 (佑)   2019-08-06 02:23:13
簡單來說
在使用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會是很常見的寫法。
作者: s4028600 (佑)   2019-08-06 10:08:00
是指os.path.join?好像沒用 至少沒辦法用上面這兩種方法改
作者: djshen (djshen)   2019-08-06 11:33:00
資料結構 演算法沒學好 這種問題問不完的
作者: s4028600 (佑)   2019-08-06 12:00:00
root是根目錄dirs是子目錄的名稱 用上面的方法只能修改dirsjoin會跑出list不是str
作者: tsaiminghan (tsaiminghan)   2019-08-06 13:20:00
root和files組起來就是完整路徑了吧。你的問題更簡單,直接比root就好了你先把root, dirs, files印出來看看os.walk的回傳值是什麼東西吧。
作者: s4028600 (佑)   2019-08-06 20:15:00
成功了...但是放不進要用的代碼...
作者: art1 (人,原來不是人)   2019-08-06 22:34:00
那個 r 是 raw 的意思,意思是原始字串,可以避免需要逸出的情況
作者: s4028600 (佑)   2019-08-07 00:26:00
了解 感謝
作者: s860134 (s860134)   2019-08-07 09:39:00
這樣只會複製貼上的學法問題問不完連 for 迴圈都不會自己寫你的需求用 os.path 下面的function 就能達成
作者: s4028600 (佑)   2019-08-09 00:02:00
呃...找不到你說的東西 話說我也只會修改和模仿而已 所以只要有範例拿來用就行了 如果沒有或實在太難懂就只能乾脆的放棄 只是還是會學一點 不然連改都沒辦法...不過有個失敗的代碼用的函數很有用 要是當初知道 就不會找程式找到爆掉了 結果居然在放棄找之後 偶然發現我平常用的程式有這功能 讓我吐血啊...

Links booklink

Contact Us: admin [ a t ] ucptt.com