使用 pathlib 递归地遍历所有子目录

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

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

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

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

73197 次浏览

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

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

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

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

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

path = Path("docs")
for p in path.rglob("*"):
print(p.name)

使用清单理解法:

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

如果只想要目标文件或目录,可以分别将 if f.is_file()if f.is_dir()添加到(1)或(2)。或者,如果您只想针对 .txt文件,则可以使用类似于 "*.txt"的模式替换 "*"

看这个快速 向导

要查找文件夹,正确的通配符串是:

'**/'

因此,要找到路径中所有文件夹的所有路径,请这样做:

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

如果你只是想要没有路径的文件夹名称,然后打印文件夹的名称如下:

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