我正在使用os.walk
收集文件夹中的目录和子目录列表。
此处是我的代码:
children = [x[0] for x in os.walk(dir)]
for f in children:
print f + '\n'
print str(len(children)) + 'directories found'
我希望它能够在找到目录或文件名时打印它,作为跟踪进度的一种方式。
目前它只打印它构建的列表中的每个项目,但我想要的是打印它,因为它将新项目添加到children
列表。
我可以使用线程来创建一个函数来打印列表的列表,但我不认为在编写列表的同时迭代列表是一个好主意,无论如何这是我的想法:
from threading import thread
import os
import time
children = []
def fine_dirs():
children = [x[0] for x in os.walk(dir)]
print str(len(children)) + 'directories found'
def print_dirs():
for f in children:
print f + '\n'
if __name__ == "__main__":
Thread(target = find_dirs).start()
time.sleep(2.0)
Thread(target = print_dirs).start()
我添加了time.sleep(2.0)
以允许find_dirs()
函数在print_dirs()
尝试打印之前添加条目。
答案 0 :(得分:1)
所以我假设你想实现这个:
想要打印,因为它会在子列表中添加一个新项目。
import os
def show_and_append(dir):
lst = []
# assume that dir exists.
for i in os.walk(dir):
print i[0]
lst.append(i[0])
return lst
children = show_and_append('/tmp/')
答案 1 :(得分:1)
如果您只是想看看添加了什么,您可以将查找结果包装在这样的函数中,
def res(x)
print x
return x
children = [res(fold) for (fold, dirs, files) in os.walk(dir)]
然后,您可以将其与条件相结合,即仅保留名称中包含tmp
的文件夹
children = [res(fold) for (fold, dirs, files) in os.walk(dir) if 'tmp' in fold]
然而,我怀疑它的用处。