glob 用法技巧
目录
处理大量文件节省内存
匹配多个文件扩展名
遍历多种格式文件
遍历某一个文件:
查找当前目录和子目录
6. 排除特定文件
7. 大小写不敏感匹配
8. 获取绝对路径
9. 处理特殊字符
处理大量文件节省内存
技巧:用 iglob 替代 glob,逐项生成路径,节省内存。
for file in glob.iglob("**/*.csv", recursive=True):
process(file) # 逐项处理大文件列表
匹配多个文件扩展名
技巧:使用 {}
匹配多个模式,或用列表推导式合并结果。
# 方法1:使用 {} 匹配多个扩展名
files = glob.glob("*.{jpg,png}", recursive=True)
# 方法2:合并多个 glob 结果
files = [f for ext in ["*.jpg", "*.png"] for f in glob.glob(ext)]
遍历多种格式文件
import glob
import os
import time
if __name__ == '__main__':
base_dir='F:\project\lx_code\dance\pic_mp4\images_for_recon\img_1x1'
imgs=glob.glob(os.path.join(base_dir,'*.png'))+glob.glob(os.path.join(base_dir,'*.jpg'))+glob.glob(os.path.join(base_dir,'*.jpeg'))
遍历某一个文件:
from glob import glob
for video_path in glob("/shared_disk/users/lbg/project/inpaint/see3d/mp4s/person_big_0108.mp4"):
查找当前目录和子目录
# 查找当前目录及其子目录下所有的 .py 文件
py_files_recursive = glob.glob('**/*.py', recursive=True)
for file in py_files_recursive:
print(file)
6. 排除特定文件
技巧:用列表推导式过滤不需要的文件。
all_files = glob.glob("*.txt") filtered = [f for f in all_files if "temp" not in f]
7. 大小写不敏感匹配
技巧:自定义函数将模式和路径转为小写(适用于非大小写敏感系统)。
def case_insensitive_glob(pattern): return glob.glob( pattern, recursive=recursive ) files = case_insensitive_glob("*.JPG") # 匹配 .jpg 和 .JPG
8. 获取绝对路径
技巧:结合 os.path.abspath
或直接匹配绝对路径。
import os # 将相对路径转为绝对路径 abs_files = [os.path.abspath(f) for f in glob.glob("*.py")] # 直接匹配绝对路径 abs_files = glob.glob("/home/user/docs/*.pdf")
9. 处理特殊字符
技巧:用 glob.escape
转义路径中的特殊字符(如 *
, ?
)。
escaped_path = glob.escape("file[1].txt") files = glob.glob(f"{escaped_path}") # 精确匹配 file[1].txt