使用pathlib

时间:2018-06-06 07:22:47

标签: python python-3.x pathlib

如何使用pathlib递归迭代给定目录的所有子目录?

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

似乎只迭代给定目录的直接子节点。

我知道os.walk()glob可以实现这一点,但我想使用pathlib,因为我喜欢使用路径对象。

5 个答案:

答案 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)

pathlibglob方法,我们可以将模式作为参数提供。

例如: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