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/cn.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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP