如何使用pathlib递归迭代给定目录的所有子目录?
p = Path('docs')
for child in p.iterdir(): child
似乎只迭代给定目录的直接子节点。
我知道os.walk()
或glob
可以实现这一点,但我想使用pathlib,因为我喜欢使用路径对象。
答案 0 :(得分:12)
您可以使用glob
对象的Path
方法:
p = Path('docs')
for i in p.glob('**/*'):
print(i.name)
答案 1 :(得分:8)
使用Path.rglob
(用**
中的前导Path().glob("**/*")
代替):
path = Path("docs")
for p in path.rglob("*"):
print(p.name)
答案 2 :(得分:2)
pathlib
有glob
方法,我们可以将模式作为参数提供。
例如:Path('abc').glob('**/*.txt')
- 它将递归查找当前文件夹abc
和所有其他子目录以查找所有txt
个文件。
答案 3 :(得分:2)
要仅查找文件夹,正确的全局字符串是:
'**/'
因此要查找路径中所有文件夹的所有路径,请执行以下操作:
p = Path('docs')
for child in p.glob('**/'):
print(child)
如果只希望文件夹名称不带路径,则按如下方式打印文件夹名称:
p = Path('docs')
for child in p.glob('**/'):
print(child.name)
答案 4 :(得分:1)
使用列表理解:
(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
。
快速浏览guide。