首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归函数不递归

递归函数不递归
EN

Stack Overflow用户
提问于 2015-01-02 21:35:46
回答 2查看 45关注 0票数 0

我在Python 3中定义了一个函数..。

代码语言:javascript
运行
复制
>>> 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树,列出每个文件(至少对我来说),但是当我执行时.

代码语言:javascript
运行
复制
>>> find('..')
['CDB', 'dv', 'DataIntegrityUtility', 'cdb', 'libvrs']

所有的结果都有包含文件的目录。难道不应该有更多吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-02 21:37:32

在python中存在os.walk

os.walk('path') =>递归遍历目录,它给元组以目录,

子目录和文件

代码语言:javascript
运行
复制
for x,y,z in os.walk('path'):
    # z is the directory
    # y is subdirectories
    # x is the files
票数 1
EN

Stack Overflow用户

发布于 2015-01-02 21:45:52

问题是,

代码语言:javascript
运行
复制
for f in os.listdir(path):

将使用路径中包含的“叶”名称进行迭代,例如,如果'/tmp/fooand it containsbarandbaz, thenfwill bebar, thenbaz`.是path

然后检查os.path.isdir('bar') --这意味着当前目录中的'bar' (如果有的话),而不是'/tmp'下的那个!

所以你需要添加这样的东西

代码语言:javascript
运行
复制
f = os.path.join(path, f)

for语句下面,其余的逻辑才能正确操作。(如果出于某种原因,只想在out_list中使用叶名,就可以使用os.path.basename从完整的路径字符串中提取它们)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27748848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档