列出给定起始目录中子目录中的所有文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列出给定起始目录中子目录中的所有文件相关的知识,希望对你有一定的参考价值。

假设我有一个这样的目录树:

a/
├── b
│   ├── d.png
│   └── e
│       └── f.png
└── c.png

我想要的输出是:如果我想在a/b/中搜索文件:b/d.pngb/e/f.png

a/的情况下:a/c.png a/b/d.png a/b/e/f.png

我知道如何使用os.walk列出子目录中的所有文件,我搜索了很多像我一样的类似情况,但我没有找到任何。

这是我最近的尝试:

path = "a/b"
pathBase = os.path.basename(path)

for p, dirs, files in os.walk(path):
    for file in files:
        print(os.path.join(p.replace(path, pathBase),file))

虽然这与a/b/的预期效果一样,但它不适用于a/

a的输出是:c.png b/d.png b/e/f.png,这与预期不符。

答案

如果从path中删除尾部斜杠,您的代码将(几乎)正确,但无论如何您应该使用os.path.relpath来计算相对文件路径:

import os

def f(path):
    path = path.rstrip(os.sep)
    parent = os.path.dirname(path)
    for p, dirs, files in os.walk(path):
        for file in files:
            print(os.path.relpath(os.path.join(p, file), parent))

为了它的价值,pathlib使路径操作更容易:

from pathlib import Path

def f(path):
    path = Path(path)
    for x in path.rglob('*'):
        if not x.is_dir():
            print(x.relative_to(path.parent))

以上是关于列出给定起始目录中子目录中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

递归列出给定目录下的所有文件和目录

使用delphi列出字符串网格中目录中的所有文件

Linux 命令(140)—— tree 命令

Linux 命令(140)—— tree 命令

Python 列出目录、子目录和文件

如何检查给定目录是不是可访问?