1

我想谈谈几个目录,然后只获取一个目录的信息。目前我使用:

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中获取单个目录下的所有目录和文件的最短方法是什么?

4

1 回答 1

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关键字参数保留为True, 的文档中os.walk()才有效:

topdownisTrue时,调用者可以就地修改 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)
于 2015-07-05T02:40:45.650 回答