【问题标题】:How to fetch a specific file or directory list using os.walk in Python?如何在 Python 中使用 os.walk 获取特定文件或目录列表?
【发布时间】:2013-02-13 22:58:39
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 也许您只是在寻找 os.listdir('/path/to/dir') 而不是 os.walk...?

标签: python indexing tuples os.walk


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2021-06-13
    • 2015-02-06
    • 2020-05-04
    相关资源
    最近更新 更多