📅  最后修改于: 2023-12-03 15:33:25.422000             🧑  作者: Mango
当你需要在一个目录及其子目录中搜索所有的文件时,pathlib 库提供了递归搜索的方法。递归搜索会遍历整个目录及其子目录,直到找到需要的文件。
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.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 属性来编写一个递归搜索过滤器。
以上就是本文的内容,希望能帮助到你。