[问题] 排除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