使用 pathlib 递归遍历所有子目录
Recursively iterate through all subdirectories using pathlib
如何使用 pathlib 递归遍历给定目录的所有子目录?
p = Path('docs')
for child in p.iterdir(): child
似乎只迭代给定目录的直接子目录。
我知道 os.walk()
或 glob
可以做到这一点,但我想使用 pathlib,因为我喜欢使用路径对象。
您可以使用 Path
对象的 glob
方法:
p = Path('docs')
for i in p.glob('**/*'):
print(i.name)
pathlib
有 glob
方法,我们可以在其中提供模式作为参数。
例如: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"
等模式。
快速查看 guide。
要仅查找文件夹,正确的 glob 字符串是:
'**/'
因此,要找到路径中所有文件夹的所有路径,请执行以下操作:
p = Path('docs')
for child in p.glob('**/'):
print(child)
如果您只想要没有路径的文件夹名称,请像这样打印文件夹名称:
p = Path('docs')
for child in p.glob('**/'):
print(child.name)
如何使用 pathlib 递归遍历给定目录的所有子目录?
p = Path('docs')
for child in p.iterdir(): child
似乎只迭代给定目录的直接子目录。
我知道 os.walk()
或 glob
可以做到这一点,但我想使用 pathlib,因为我喜欢使用路径对象。
您可以使用 Path
对象的 glob
方法:
p = Path('docs')
for i in p.glob('**/*'):
print(i.name)
pathlib
有 glob
方法,我们可以在其中提供模式作为参数。
例如: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"
等模式。
快速查看 guide。
要仅查找文件夹,正确的 glob 字符串是:
'**/'
因此,要找到路径中所有文件夹的所有路径,请执行以下操作:
p = Path('docs')
for child in p.glob('**/'):
print(child)
如果您只想要没有路径的文件夹名称,请像这样打印文件夹名称:
p = Path('docs')
for child in p.glob('**/'):
print(child.name)