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

2024-03-28 11:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

我知道如何使用os.步行我找了很多类似的情况,但没有找到。你知道吗

以下是我的最新尝试:

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.pngb/d.pngb/e/f.png,这与预期不符。你知道吗


Tags: 文件pathin目录forpngos情况
1条回答
网友
1楼 · 发布于 2024-03-28 11:14:34

如果从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))

相关问题 更多 >