0

我想知道是否可以通过索引号检索 os.walk 类中特定子文件夹中的特定文件。

我还想知道如何仅列出 os.walk 中特定级别的子目录,例如仅列出根目录的子目录。我可以列出所有子目录,我可以看到第一级子目录的列表首先组合在一起,但是我找不到不使用循环来过滤掉那些子目录的方法......

像这样的东西部分有效(改编自另一个问题),但我不知道如何从一个级别过滤文件夹:

dirs[:] = [d for d in dirs if re.match('anyname_\d{3}', d, flags=0)]

os.walk 元组在使用 type 命令时显示为“列表”,而在尝试使用索引号时出现的一些错误是指对字典对象的不当使用。我很困惑。

谢谢!

4

1 回答 1

1

尚不完全清楚您想要做什么,但我可以提供一个示例,(我认为)做了足够多的事情,您可以弄清楚如何做您想做的事情:打印每个名为“anyname”的目录中第三个文件的路径名这恰好比顶部低两个级别:

for dirpath, dirnames, filenames in os.walk(top):
    depth = os.path.relpath(dirpath, top).count(os.pathsep)
    if depth == 2 and os.path.basename(dirpath) == "anyname":
        print(os.path.join(dirpath, filenames[2]))

您可以通过修剪walk甚至不查看超过 2 深的目录来提高效率:

for dirpath, dirnames, filenames in os.walk(top):
    depth = os.path.relpath(dirpath, top).count(os.pathsep)
    if depth == 2:
        if os.path.basename(dirpath) == "anyname":
            print(os.path.join(dirpath, filenames[2]))
        dirnames.clear()

或者,更有效但更复杂一点,修剪所有未命名为“anyname”的深度 2 目录:

for dirpath, dirnames, filenames in os.walk(top):
    depth = os.path.relpath(dirpath, top).count(os.pathsep)
    if depth == 1:
        dirnames[:] = ["anyname"] if "anyname" in dirnames else []
    elif depth == 2:
        print(os.path.join(dirpath, filenames[2]))
        dirnames.clear()
于 2013-02-14T00:29:27.680 回答