Python 板


LINE

簡單來說 在使用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-- | ---1 | ---2 | ---3--- | ---1 | ---2 我想要排除root---3---2所以輸入2的時候 他會連同root---2一起排除 所以我想要排除的是路徑 不是名稱 有什麼函數嗎 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.224.166.100 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1565029395.A.7C3.html
1F:推 froce: 搞懂os.walk傳回你就會寫了。08/06 07:06
2F:→ froce: 你可以用root和dirs的組合去篩選。08/06 07:06
3F:→ froce: 然後第二種那個叫list comprehension,在python會是很常見08/06 07:06
4F:→ froce: 的寫法。08/06 07:06
5F:→ s4028600: 是指os.path.join?好像沒用 至少沒辦法用上面這兩種方08/06 10:08
6F:→ s4028600: 法改08/06 10:08
7F:→ djshen: 資料結構 演算法沒學好 這種問題問不完的08/06 11:33
8F:→ s4028600: root是根目錄dirs是子目錄的名稱 用上面的方法只能修改d08/06 12:00
9F:→ s4028600: irs08/06 12:00
10F:→ s4028600: join會跑出list不是str08/06 12:01
11F:→ tsaiminghan: root和files組起來就是完整路徑了吧。08/06 13:20
12F:→ tsaiminghan: 你的問題更簡單,直接比root就好了08/06 13:32
13F:→ tsaiminghan: 你先把root, dirs, files印出來看看os.walk的回傳值08/06 13:33
14F:→ tsaiminghan: 是什麼東西吧。08/06 13:33
15F:→ 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
16F:推 art1: 那個 r 是 raw 的意思,意思是原始字串,可以避免需要逸出 08/06 22:34
17F:→ art1: 的情況 08/06 22:34
18F:→ s4028600: 了解 感謝 08/07 00:26
19F:推 s860134: 這樣只會複製貼上的學法問題問不完 08/07 09:39
20F:→ s860134: 連 for 迴圈都不會自己寫 08/07 09:39
21F:→ s860134: 你的需求用 os.path 下面的function 就能達成 08/07 09:48
22F:→ s4028600: 呃...找不到你說的東西 話說我也只會修改和模仿而已 所 08/09 00:02
23F:→ s4028600: 以只要有範例拿來用就行了 如果沒有或實在太難懂就只能 08/09 00:02
24F:→ s4028600: 乾脆的放棄 只是還是會學一點 不然連改都沒辦法... 08/09 00:02
25F:→ s4028600: 不過有個失敗的代碼用的函數很有用 要是當初知道 就不會 08/09 00:12
26F:→ s4028600: 找程式找到爆掉了 結果居然在放棄找之後 偶然發現我平常 08/09 00:12
27F:→ s4028600: 用的程式有這功能 讓我吐血啊... 08/09 00:12







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP