【发布时间】:2011-10-09 00:15:40
【问题描述】:
我正在尝试对给定路径下的所有文件做一些事情。我不想事先收集所有文件名然后对它们做一些事情,所以我尝试了这个:
import os
import stat
def explore(p):
s = ''
list = os.listdir(p)
for a in list:
path = p + '/' + a
stat_info = os.lstat(path )
if stat.S_ISDIR(stat_info.st_mode):
explore(path)
else:
yield path
if __name__ == "__main__":
for x in explore('.'):
print '-->', x
但是这段代码在碰到目录时会跳过目录,而不是产生它们的内容。我做错了什么?
【问题讨论】:
-
有些语言可以产生整个序列,而不仅仅是单个元素。我不认为 Python 是其中之一。 mindscapehq.com/blog/index.php/2011/02/28/…
-
由于标题暗示了一个比 os.walk 可以解决的更普遍的问题,考虑一下: def explore(p): if isinstance(p, (list, tuple)): for x in p : explore(p) else: yield p 这也有同样的问题。为什么它不起作用?
标签: python recursion iterator directory-structure yield