如何使用pathlib递归地遍历给定目录的所有子目录?
p = Path('docs') for child in p.iterdir(): child
似乎只迭代给定目录的直接子目录。我知道os.walk()或glob可以做到这一点,但我想使用pathlib,因为我喜欢使用path对象。
os.walk()
glob
nhhxz33t1#
使用Path.rglob(在Path().glob("**/*")中替换前导**):
Path.rglob
Path().glob("**/*")
**
path = Path("docs") for p in path.rglob("*"): print(p.name)
vddsk6oq2#
可以使用Path对象的glob方法:
Path
p = Path('docs') for i in p.glob('**/*'): print(i.name)
zvms9eto3#
要只查找文件夹,正确的glob字符串是:
'**/'
因此,要查找路径中所有文件夹的所有路径,请执行以下操作:
p = Path('docs') for child in p.glob('**/'): print(child)
如果你只需要文件夹名称而不需要路径,那么就像这样打印文件夹的名称:
p = Path('docs') for child in p.glob('**/'): print(child.name)
jaql4c8m4#
pathlib有一个glob方法,我们可以在其中提供pattern作为参数。例如:Path('abc').glob('**/*.txt')-它将递归地查找当前文件夹abc和所有其他子目录,以定位所有txt文件。
pathlib
Path('abc').glob('**/*.txt')
abc
txt
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。
if f.is_file()
if f.is_dir()
.txt
"*"
"*.txt"
xiozqbni6#
在Python 3.12(撰写本文时尚未发布)中,您将能够使用pathlib.Path.walk()
pathlib.Path.walk()
6条答案
按热度按时间nhhxz33t1#
使用
Path.rglob
(在Path().glob("**/*")
中替换前导**
):vddsk6oq2#
可以使用
Path
对象的glob
方法:zvms9eto3#
要只查找文件夹,正确的glob字符串是:
因此,要查找路径中所有文件夹的所有路径,请执行以下操作:
如果你只需要文件夹名称而不需要路径,那么就像这样打印文件夹的名称:
jaql4c8m4#
pathlib
有一个glob
方法,我们可以在其中提供pattern作为参数。例如:
Path('abc').glob('**/*.txt')
-它将递归地查找当前文件夹abc
和所有其他子目录,以定位所有txt
文件。1szpjjfi5#
使用列表解析:
如果只想定位文件或目录,可以分别在(1)或(2)中添加
if f.is_file()
或if f.is_dir()
。如果只想定位.txt
文件,可以将"*"
替换为"*.txt"
。看看这个快速guide。
xiozqbni6#
在Python 3.12(撰写本文时尚未发布)中,您将能够使用
pathlib.Path.walk()