干净的方式去os.walk一次python

时间:2015-07-05 02:39:42

标签: python os.path

我想谈几个目录,然后抓住一个目录的信息。目前我使用:

i = 0
for root, dirs, files in os.walk(home_path):
    if i >= 1:
        return 1
    i += 1
    for this_dir in dirs:
       do stuff

当然,这非常乏味。当我想走下它下面的子目录时,我会使用j等同样的5行...

在python中获取单个目录下所有目录和文件的最短方法是什么?

1 个答案:

答案 0 :(得分:5)

您可以清空dirs列表,os.walk()不会递归:

for root, dirs, files in os.walk(home_path):
    for dir in dirs:
        # do something with each directory
    dirs[:] = []  # clear directories.

注意dirs[:] =切片分配;我们正在替换dirs中的元素(而不是dirs引用的列表),以便os.walk()不会处理已删除的目录。

仅当您将topdown关键字参数与documentation of os.walk()保持True时才有效:

  

topdownTrue时,调用者可以就地修改dirnames列表(可能使用del或切片分配),而walk()只会递归到名称保留在 dirnames 中的子目录;这可用于修剪搜索,强制执行特定的访问顺序,甚至可以通知walk()调用者在再次恢复walk()之前创建或重命名的目录。

或者,使用os.listdir()并自行将名称过滤到目录和文件中:

dirs = []
files = []
for name in os.listdir(home_path):
    path = os.path.join(home_path, name)
    if os.isdir(path):
        dirs.append(name)
    else:
        files.append(name)