开发者

Python使用glob库批量匹配文件路径

开发者 https://www.devze.com 2025-06-12 09:21 出处:网络 作者: 萧鼎
目录一、glob 模块简介常见应用场景包括:二、通配符模式基础三、基本用法3.1 查找当前目录下的所有 .txt 文件3.2 匹配指定路径中的图像文件3.3 匹配多个后缀名(结合列表推导)四、递归查找子目录文
目录
  • 一、glob 模块简介
    • 常见应用场景包括:
  • 二、通配符模式基础
    • 三、基本用法
      • 3.1 查找当前目录下的所有 .txt 文件
      • 3.2 匹配指定路径中的图像文件
      • 3.3 匹配多个后缀名(结合列表推导)
    • 四、递归查找子目录文件(**)
      • 五、与 os.path、pathlib 联合使用
        • 5.1 获取文件名或绝对路径
        • 5.2 使用 pathlib 更优雅地处理路径
      • 六、高级使用技巧
        • 6.1 查找以数字开头的文件
        • 6.2 多级目录下查找 .png 图像
        • 6.3 排除某些文件(结合 fnmatch 或过滤器)
      • 七、实战案例:批量读取图片并处理
        • 八、glob vs os.listdir vs pathlib
          • 九、常见问题与误区
            • 9.1 glob 不返回文件?
            • 9.2 无法匹配隐藏文件?
          • 十、总结与最佳实践

            一、glob 模块简介

            glob 是 python 的标准库之一,无需额外安装,专门用于文件名的模式匹配搜索。它的名字来源于 Unix shell 命令中的“globbing”,意思是使用通配符进行匹配。

            常见应用场景包括:

            • 批量读取某个目录下的图片、文本、日志等文件
            • 在子目录中递归查找特定类型的文件
            • 配合 os 或 shutil 实现批量文件复制、删除、重命名等操作

            二、通配符模式基础

            glob 使用与 shell 类似的通配符规则:

            通配符含义示例
            *匹配任意长度的任意字符*.txt 匹配所有 .txt
            ?匹配任意一个字符file?.txt 匹配 file1.txtfileA.txt
            []匹配指定范围内的任一字符file[1-3].txt 匹配 file1.txjstfile2.txtfile3.txt
            **匹配任意目录(需开启递归)**/*.py 匹配任意子目录中的 .py 文件(需设置 recursive=True

            三、基本用法

            3.1 查找当前目录下的所有 .txt 文件

            import glob
            
            files = glob.glob("*.txt")
            print(files)
            # 输出示例: ['data1.txt', 'report.txt']
            

            3.2 匹配指定路径中的图像文件

            image_files = glob.glob("images/*.jpg")
            

            3.3 匹配多个后缀名(结合列表推导)

            files = glob.glob("data/*.csv") + glob.glob("data/*.xlsx")
            

            四、递归查找子目录文件(**)

            从 Python 3.5 开始,glob&nbandroidsp;支持递归模式:

            files = glob.glob("**/*.py", recursive=True)
            

            这会在当前目录及其所有子目录中查找&GFQpjjTtinbsp;.py 文件。

            默认情况下 ** 不递归,必须显式设置 recursive=True。

            五、与 os.path、pathlib 联合使用

            5.1 获取文件名或绝对路径

            import os
            
            for file in glob.glob("logs/*.log"):
                print("文件名:", os.path.basename(file))
                print("绝对路径:", os.path.abspath(file))
            

            5.2 使用 pathlib 更优雅地处理路径

            from pathlib import Path
            
            files = Path("data").glob("*.txt")
            for file in files:
                print(file.name, file.stem, file.suffix)
            

            六、高级使用技巧

            6.1 查找以数字开头js的文件

            glob.glob("[0-9]*.txt")
            

            6.2 多级目录下查找 .png 图像

            glob.glob("*/**/*.png", recursive=True)
            

            6.3 排除某些文件(结合 fnmatch 或过滤器)

            import fnmatch
            
            files = [f for f in glob.glob("data/*.csv") if not fnmatch.fnmatch(f, "data/test_*.csv")]
            

            七、实战案例:批量读取图片并处理

            import glob
            from PIL import Image
            
            image_paths = glob.glob("images/**/*.jpg", recursive=True)
            
            for path in image_paths:
                img = Image.open(path)
                print(f"{path}: {img.size}")
            

            八、glob vs os.listdir vs pathlib

            特性globos.listdirpathlib
            通配符匹配支持不支持,需要手动过滤支持 .glob()
            递归搜索支持 (**)需手动递归遍历rglob() 更简洁
            返回类型str 列表str 列表Path 对象生成器
            使用习惯类 Unix shell 风格简单、通用面向对象、现代化

            建议在新项目中逐渐迁移至 pathlib,但 glob 的通配能力仍不可替代。

            九、常见问题与误区

            9.1 globpython 不返回文件?

            • 检查路径是否正确(相对/绝对路径)
            • 注意区分大小写(特别是 linux)
            • **/*.py 要配合 recursive=True

            9.2 无法匹配隐藏文件?

            glob("*") 默认不会匹配以 . 开头的文件,需要明确指定:

            glob.glob(".*")  # 匹配隐藏文件
            

            十、总结与最佳实践

            • glob 是处理文件路径批量操作的利器
            • 支持通配符、递归、灵活组合
            • 可与 ospathlibPILshutil 等库组合处理复杂任务
            • 对于大规模目录扫描,推荐使用 pathlib.rglob() 更高效

            以上就是Python使用glob库批量匹配文件路径的详细内容,更多关于Python glob匹配文件路径的资料请关注编程客栈(www.devze.com)其它相关文章!

            0

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            关注公众号