如何使用pathlib递归迭代给定目录的所有子目录?
p = Path('docs')
for child in p.iterdir(): child
似乎只迭代给定目录的直接子级。
我知道使用os.walk()
or可以做到这一点glob
,但我想使用 pathlib 因为我喜欢使用路径对象。
如何使用pathlib递归迭代给定目录的所有子目录?
p = Path('docs')
for child in p.iterdir(): child
似乎只迭代给定目录的直接子级。
我知道使用os.walk()
or可以做到这一点glob
,但我想使用 pathlib 因为我喜欢使用路径对象。
使用(代替中Path.rglob
的前导):**
Path().glob("**/*")
path = Path("docs")
for p in path.rglob("*"):
print(p.name)
您可以使用对象的glob
方法Path
:
p = Path('docs')
for i in p.glob('**/*'):
print(i.name)
pathlib
有glob
方法,我们可以提供模式作为参数。
例如:Path('abc').glob('**/*.txt')
- 它将abc
递归查找当前文件夹和所有其他子目录以定位所有txt
文件。
要仅查找文件夹,正确的 glob 字符串是:
'**/'
因此,要查找路径中所有文件夹的所有路径,请执行以下操作:
p = Path('docs')
for child in p.glob('**/'):
print(child)
如果您只想要没有路径的文件夹名称,请像这样打印文件夹的名称:
p = Path('docs')
for child in p.glob('**/'):
print(child.name)
使用列表推导:
(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
文件。
请参阅此快速指南。