推 froce: 搞懂os.walk傳回你就會寫了。08/06 07:06
→ froce: 你可以用root和dirs的組合去篩選。08/06 07:06
→ froce: 然後第二種那個叫list comprehension,在python會是很常見08/06 07:06
→ froce: 的寫法。08/06 07:06
→ s4028600: 是指os.path.join?好像沒用 至少沒辦法用上面這兩種方08/06 10:08
→ s4028600: 法改08/06 10:08
→ djshen: 資料結構 演算法沒學好 這種問題問不完的08/06 11:33
→ s4028600: root是根目錄dirs是子目錄的名稱 用上面的方法只能修改d08/06 12:00
→ s4028600: irs08/06 12:00
→ s4028600: join會跑出list不是str08/06 12:01
→ tsaiminghan: root和files組起來就是完整路徑了吧。08/06 13:20
→ tsaiminghan: 你的問題更簡單,直接比root就好了08/06 13:32
→ tsaiminghan: 你先把root, dirs, files印出來看看os.walk的回傳值08/06 13:33
→ tsaiminghan: 是什麼東西吧。08/06 13:33
→ s4028600: 成功了...但是放不進要用的代碼...08/06 20:15
import fnmatch
import os
import re
excludes = ['']
excludes = r'|'.join([fnmatch.translate(x) for x in excludes]) or r'$.'
for root, dirs, files in os.walk('D:\long\Desktop\image'):
dirs[:] = [os.path.join(root, d) for d in dirs]
dirs[:] = [d for d in dirs if not re.match(excludes, d)]
print(dirs)
成功運轉
接下來是想搞懂代碼是什麼意思
感謝froce告知那條奇特的函數是
list comprehension
想問一下
r'|'
r'$.'
這兩個是出自哪個函數
搜尋不了
r印象中是讀取檔案
但是讀取這兩個是什麼意思?
※ 編輯: s4028600 (125.224.166.100 臺灣), 08/06/2019 21:20:08
推 art1: 那個 r 是 raw 的意思,意思是原始字串,可以避免需要逸出 08/06 22:34
→ art1: 的情況 08/06 22:34
→ s4028600: 了解 感謝 08/07 00:26
推 s860134: 這樣只會複製貼上的學法問題問不完 08/07 09:39
→ s860134: 連 for 迴圈都不會自己寫 08/07 09:39
→ s860134: 你的需求用 os.path 下面的function 就能達成 08/07 09:48
→ s4028600: 呃...找不到你說的東西 話說我也只會修改和模仿而已 所 08/09 00:02
→ s4028600: 以只要有範例拿來用就行了 如果沒有或實在太難懂就只能 08/09 00:02
→ s4028600: 乾脆的放棄 只是還是會學一點 不然連改都沒辦法... 08/09 00:02
→ s4028600: 不過有個失敗的代碼用的函數很有用 要是當初知道 就不會 08/09 00:12
→ s4028600: 找程式找到爆掉了 結果居然在放棄找之後 偶然發現我平常 08/09 00:12
→ s4028600: 用的程式有這功能 讓我吐血啊... 08/09 00:12