递归函数不递归

时间:2015-01-02 21:35:47

标签: python file python-3.x recursion directory

我在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']

所有结果都有包含文件的目录。那里应该没有更多吗?

2 个答案:

答案 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