我在Python 3中定义了一个函数......
>>> import os
>>> def find(path):
... if not os.path.isdir(path):
... return []
... out_list = []
... for f in os.listdir(path):
... if os.path.isdir(f):
... for g in find(f):
... out_list.append(g)
... else:
... out_list.append(f)
... return out_list
...
看起来这会爬下path
的树并列出每个文件(无论如何都是我),但是当我执行它时......
>>> find('..')
['CDB', 'dv', 'DataIntegrityUtility', 'cdb', 'libvrs']
所有结果都有包含文件的目录。那里应该没有更多吗?
答案 0 :(得分:3)
问题是,
for f in os.listdir(path):
将使用路径中包含的“leaf”名称进行迭代,例如path
是'/ tmp / foo and it contains
bar and
baz , then
f {{1 }} {条{1}} baz`。
然后你检查will be
- 这意味着, then
当前目录中是否有os.path.isdir('bar')
,不是 'bar'
下的那个!
所以你需要添加像
这样的东西'/tmp'
正好位于f = os.path.join(path, f)
语句下方,以便其余逻辑正常运行。 (如果您出于某种原因只想在for
中使用叶名称,则可以使用out_list
从完整路径字符串中提取它们。
答案 1 :(得分:1)
在python中存在os.walk
。
os.walk('路径')=>递归地遍历目录,它给元组提供目录,
子目录和文件
for x,y,z in os.walk('path'):
# z is the directory
# y is subdirectories
# x is the files