上一篇
Python glob库完全指南:高效文件路径匹配教程 | Python文件操作技巧
- Python
- 2025-08-07
- 389
Python glob库完全指南
掌握文件路径匹配技巧,轻松处理复杂文件操作
什么是glob库?
Python的glob模块用于查找符合特定规则的文件路径名。它使用Unix shell风格的通配符进行文件匹配,让你可以轻松地搜索、筛选和操作文件系统中的文件。
与手动遍历目录相比,glob提供了一种更简洁、更高效的方式来处理文件路径匹配问题,特别适合需要批量处理文件的场景。
为什么使用glob库?
- 简洁的语法:使用通配符(*, ?等)简化文件匹配
- 跨平台兼容:在Windows、macOS和Linux上表现一致
- 高效便捷:一行代码完成复杂的文件搜索
- 与os模块无缝集成:返回结果可直接用于文件操作
- 支持递归搜索:轻松查找嵌套目录中的文件
glob通配符详解
通配符 | 功能 | 示例 | 匹配结果 |
---|---|---|---|
* | 匹配任意数量的字符 | *.txt | 所有.txt文件 |
? | 匹配单个字符 | image?.jpg | image1.jpg, imageA.jpg等 |
[] | 匹配指定范围内的字符 | report[0-9].docx | report0.docx到report9.docx |
** | 递归匹配所有子目录(需recursive=True) | **/*.py | 当前目录及子目录中的所有.py文件 |
glob核心函数
1. glob.glob()
返回匹配指定模式的所有文件路径列表。
import glob # 查找当前目录中所有.txt文件 txt_files = glob.glob('*.txt') print(txt_files) # 查找子目录中的图片文件 image_files = glob.glob('images/*.png') print(image_files)
2. glob.iglob()
返回一个迭代器,逐个生成匹配的文件路径,适合处理大量文件。
import glob # 使用迭代器处理大量文件 for file_path in glob.iglob('**/*.log', recursive=True): print(f"正在处理: {file_path}") # 执行文件操作...
3. 递归搜索(recursive=True)
使用**通配符和recursive参数进行递归目录搜索。
import glob # 递归查找所有子目录中的.py文件 all_py_files = glob.glob('**/*.py', recursive=True) print(f"找到{len(all_py_files)}个Python文件") # 查找特定目录结构中的文件 config_files = glob.glob('project/**/config/*.ini', recursive=True)
实际应用示例
批量重命名文件
import glob import os # 将所有临时文件从.tmp重命名为.bak for tmp_file in glob.glob('*.tmp'): new_name = os.path.splitext(tmp_file)[0] + '.bak' os.rename(tmp_file, new_name) print(f"重命名: {tmp_file} -> {new_name}")
合并多个CSV文件
import glob import pandas as pd # 找到所有2023年的CSV文件 csv_files = glob.glob('sales_data/sales_2023*.csv') # 合并所有CSV文件 combined_csv = pd.concat([pd.read_csv(f) for f in csv_files]) combined_csv.to_csv("combined_sales_2023.csv", index=False) print(f"合并了{len(csv_files)}个文件")
清理旧日志文件
import glob import os from datetime import datetime, timedelta # 查找超过30天的日志文件 cutoff_date = datetime.now() - timedelta(days=30) for log_file in glob.glob('logs/**/*.log', recursive=True): mod_time = datetime.fromtimestamp(os.path.getmtime(log_file)) if mod_time < cutoff_date: os.remove(log_file) print(f"删除旧日志: {log_file}")
glob使用注意事项
- 路径分隔符:Windows使用反斜杠(\),而glob使用正斜杠(/)作为路径分隔符
- 大小写敏感:Unix系统区分大小写,Windows不区分
- 隐藏文件:glob默认不匹配以点(.)开头的隐藏文件
- 性能考虑:递归搜索大量文件时,考虑使用iglob避免内存问题
- 模式顺序:glob不保证返回的文件路径顺序,需要时自行排序
- 符号链接:默认情况下会跟随符号链接,可以使用glob.glob(..., include_hidden=False)控制
glob vs os.listdir
虽然os.listdir()也可以列出目录内容,但glob提供了更强大的模式匹配功能:
特性 | glob | os.listdir |
---|---|---|
通配符支持 | ✓ 支持 | ✗ 不支持 |
递归搜索 | ✓ 支持 | ✗ 不支持 |
返回完整路径 | ✓ 默认 | ✗ 仅文件名 |
结果过滤 | ✓ 模式匹配 | ✗ 需额外代码 |
开始使用glob优化你的文件操作吧!
无论是简单的文件查找还是复杂的批量处理,glob都能让你的代码更简洁高效。
本文由LiMinDan于2025-08-07发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://liuhe.jltcw.com/20257537.html
发表评论