递归函数不递归
Recursive function does not recurse
我在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']
那里的所有结果都是包含文件的目录。那里不应该有更多吗?
在python中存在os.walk
。
os.walk('path') => 递归遍历目录,它给出目录的元组,
子目录和文件
for x,y,z in os.walk('path'):
# z is the directory
# y is subdirectories
# x is the files
问题是,
for f in os.listdir(path):
将迭代路径中包含的 "leaf" 名称,例如,如果 path
是 '/tmp/fooand it contains
barand
baz, then
fwill be
bar, then
baz`.
但是然后你检查是否 os.path.isdir('bar')
—— 这意味着 'bar'
如果在当前目录中有的话, 而不是 [=20 下的那个=]!
所以你需要添加类似
的内容
f = os.path.join(path, f)
就在 for
语句下方,以便其余逻辑正确运行。 (如果你出于某种原因只想要 out_list
中的叶名称,你可以使用 os.path.basename
从完整的路径字符串中提取它们)。
我在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']
那里的所有结果都是包含文件的目录。那里不应该有更多吗?
在python中存在os.walk
。
os.walk('path') => 递归遍历目录,它给出目录的元组,
子目录和文件
for x,y,z in os.walk('path'):
# z is the directory
# y is subdirectories
# x is the files
问题是,
for f in os.listdir(path):
将迭代路径中包含的 "leaf" 名称,例如,如果 path
是 '/tmp/fooand it contains
barand
baz, then
fwill be
bar, then
baz`.
但是然后你检查是否 os.path.isdir('bar')
—— 这意味着 'bar'
如果在当前目录中有的话, 而不是 [=20 下的那个=]!
所以你需要添加类似
的内容f = os.path.join(path, f)
就在 for
语句下方,以便其余逻辑正确运行。 (如果你出于某种原因只想要 out_list
中的叶名称,你可以使用 os.path.basename
从完整的路径字符串中提取它们)。