在找到文件/目录名时打印它

时间:2015-09-02 12:42:35

标签: python

我正在使用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()尝试打印之前添加条目。

2 个答案:

答案 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]
然而,我怀疑它的用处。