如何通过glob同时遍历.tar与csv.gz后缀的文件?
解决方案
首先纠正一个小误解:你代码里的*不是正则字符,是glob模块的通配符,作用是匹配任意长度的任意字符(路径分隔符/除外)。
要同时遍历.tar和.csv.gz文件,有几种实用方法:
方法1:用glob原生的多模式匹配(最简洁)
glob支持用{模式1,模式2}的语法同时匹配多种后缀,直接修改路径即可:
for f in glob.glob('{}/{}/Compressed_Files/*.{tar,csv.gz}'.format(path, site_id)): # 这里写你的文件处理逻辑
这种方法效率最高,因为glob会在底层直接完成过滤,不需要额外处理。
方法2:用正则表达式过滤(适合复杂规则)
如果需要更灵活的匹配逻辑(比如文件名包含特定字符),可以先获取目录下所有文件,再用正则筛选:
import re import glob # 编译正则,匹配以.tar或.csv.gz结尾的文件 match_pattern = re.compile(r'.*\.(tar|csv\.gz)$') # 先获取目录下所有文件 all_files = glob.glob('{}/{}/Compressed_Files/*'.format(path, site_id)) for f in all_files: if match_pattern.search(f): # 处理符合条件的文件
方法3:合并两个glob结果(直观易懂)
分别获取两种后缀的文件列表,再用+运算符合并遍历:
tar_files = glob.glob('{}/{}/Compressed_Files/*.tar'.format(path, site_id)) csv_gz_files = glob.glob('{}/{}/Compressed_Files/*.csv.gz'.format(path, site_id)) for f in tar_files + csv_gz_files: # 处理文件
这种方法适合需要分别对两种文件做预处理再统一遍历的场景。
内容的提问来源于stack exchange,提问作者View_user
相关产品推荐
相关产品推荐

