📜  pathlib 递归搜索 (1)

📅  最后修改于: 2023-12-03 15:33:25.422000             🧑  作者: Mango

Python Pathlib 递归搜索指南

当你需要在一个目录及其子目录中搜索所有的文件时,pathlib 库提供了递归搜索的方法。递归搜索会遍历整个目录及其子目录,直到找到需要的文件。

使用 Path.glob() 方法进行递归搜索

Path.glob() 方法可以按通配符模式搜索匹配的文件名。通配符可以使用 * 匹配任意数量的字符,也可以使用 ** 匹配任意数量的子目录。下面是一个简单的示例:

from pathlib import Path

# 使用递归搜索找到指定的 JPEG 文件
jpeg_files = list(Path('.').glob('**/*.jpg'))
print(jpeg_files)

这行代码会从当前目录开始,递归搜索所有的 .jpg 文件并将它们放到一个列表中。使用 list() 将生成器转换成列表。

输出示例:

[WindowsPath('images/bg.jpg'), WindowsPath('images/island.jpg'), WindowsPath('images/pycon.jpg')]
使用Path.rglob()方法进行递归搜索

Path.rglob() 方法与 Path.glob() 方法非常相似,只不过它会递归搜索整个目录树,不管文件在哪个子目录中。下面是一个简单的示例:

from pathlib import Path

# 使用递归搜索找到指定的 markdown 文件
markdown_files = list(Path('.').rglob('*.md'))
print(markdown_files)

这行代码会从当前目录开始,递归搜索所有的 .md 文件并将它们放到一个列表中。

输出示例:

[WindowsPath('README.md'), WindowsPath('docs/api.md'), WindowsPath('docs/install.md')]
递归搜索过滤器

上述示例中的通配符模式搜索会返回所有匹配的文件,无论是目录还是文件。如果你只想搜索特定类型的文件,可以使用 Path.is_file() 和 Path.suffix 属性来编写一个递归搜索过滤器。下面是一个查找所有 Python 脚本的示例:

from pathlib import Path

python_files = []
for path in Path('.').rglob('*'):
    if path.is_file() and path.suffix == '.py':
        python_files.append(path)

print(python_files)

这行代码会从当前目录开始,递归搜索所有的文件并将它们放到一个列表中。然后,使用 is_file() 和 suffix 属性来检查是否是 Python 脚本。

输出示例:

[WindowsPath('run.py'), WindowsPath('tests/test.py')]
结论

pathlib 库提供了一种简单而强大的方式来递归地搜索目录结构。Path.glob() 和 Path.rglob() 方法可以根据通配符模式在目录及其子目录中搜索文件。您还可以结合使用 Path.is_file() 和 Path.suffix 属性来编写一个递归搜索过滤器。

以上就是本文的内容,希望能帮助到你。