目录
1. 遍历加编号
from glob import glob
res=glob(r"E:\project\jijia\tools_jijia\reid_track/*.py")
for ii, video_path in enumerate(res):
print(ii,video_path)
2. 处理大量文件节省内存
技巧:用 iglob 替代 glob,逐项生成路径,节省内存。
for file in glob.iglob("**/*.csv", recursive=True):
process(file) # 逐项处理大文件列表
3.匹配多个文件扩展名
技巧:使用 {}
匹配多个模式,或用列表推导式合并结果。
# 方法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"):
查找当前目录和子目录,就是2级子目录,3级子目录失败
import glob
if __name__ == '__main__':
# 查找当前目录及其子目录下所有的 .py 文件
py_files_recursive = glob.glob("E:\project\Grounded-SAM-2-main\sav_dataset/**/*.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