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

rkttyhzu  于 2023-03-28  发布在  Python
关注(0)|答案(6)|浏览(192)

如何使用pathlib递归地遍历给定目录的所有子目录?

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

似乎只迭代给定目录的直接子目录。
我知道os.walk()glob可以做到这一点,但我想使用pathlib,因为我喜欢使用path对象。

nhhxz33t

nhhxz33t1#

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

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

vddsk6oq2#

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

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

zvms9eto3#

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

'**/'

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

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

如果你只需要文件夹名称而不需要路径,那么就像这样打印文件夹的名称:

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

jaql4c8m4#

pathlib有一个glob方法,我们可以在其中提供pattern作为参数。
例如:Path('abc').glob('**/*.txt')-它将递归地查找当前文件夹abc和所有其他子目录,以定位所有txt文件。

1szpjjfi

1szpjjfi5#

使用列表解析:

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

如果只想定位文件或目录,可以分别在(1)或(2)中添加if f.is_file()if f.is_dir()。如果只想定位.txt文件,可以将"*"替换为"*.txt"
看看这个快速guide

xiozqbni

xiozqbni6#

在Python 3.12(撰写本文时尚未发布)中,您将能够使用pathlib.Path.walk()

相关问题