99

如何使用pathlib递归迭代给定目录的所有子目录?

p = Path('docs')
for child in p.iterdir(): child

似乎只迭代给定目录的直接子级。

我知道使用os.walk()or可以做到这一点glob,但我想使用 pathlib 因为我喜欢使用路径对象。

4

5 回答 5

137

使用(代替中Path.rglob的前导):**Path().glob("**/*")

path = Path("docs")
for p in path.rglob("*"):
     print(p.name)
于 2019-01-04T22:12:06.730 回答
100

您可以使用对象的glob方法Path

p = Path('docs')
for i in p.glob('**/*'):
     print(i.name)
于 2018-06-06T07:27:40.410 回答
7

pathlibglob方法,我们可以提供模式作为参数。

例如:Path('abc').glob('**/*.txt')- 它将abc递归查找当前文件夹和所有其他子目录以定位所有txt文件。

于 2018-06-06T07:38:14.277 回答
7

要仅查找文件夹,正确的 glob 字符串是:

'**/'

因此,要查找路径中所有文件夹的所有路径,请执行以下操作:

p = Path('docs')
for child in p.glob('**/'):
    print(child)

如果您只想要没有路径的文件夹名称,请像这样打印文件夹的名称:

p = Path('docs')
for child in p.glob('**/'):
    print(child.name)
于 2020-08-31T17:04:32.623 回答
5

使用列表推导:

(1) [f.name for f in p.glob("**/*")]  # or
(2) [f.name for f in p.rglob("*")]

如果您只想分别针对文件或目录,您可以添加if f.is_file()或添加到 (1) 或 (2)。if f.is_dir()或者"*"用一些模式替换,比如"*.txt"如果你只想定位.txt文件。

请参阅此快速指南

于 2020-01-06T02:14:00.790 回答