我只想讲几个目录,而只获取一个目录的信息。目前,我使用:

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

最佳答案

您可以清空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()不会处理已删除的目录。

仅当您将documentation of topdown中的True关键字参数保留为os.walk()时,此方法才有效:


  当topdownTrue时,调用者可以就地修改目录名列表(也许使用del或切片分配),并且walk()将仅递归到其名称仍保留在目录名中的子目录中。这可用于修剪搜索,强加特定的访问顺序,甚至在呼叫方再次恢复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)

关于python - 一次使用os.walk的干净方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31226731/

10-11 15:38