Python使用glob匹配文件时\d正则语法不生效无输出问题
问题原因
glob.glob() 不支持正则表达式语法,你代码里写的\d+是正则规则,用来匹配1位及以上数字,但glob只识别自带的通配符规则,不会解析\d+的正则含义,只会把它当成普通字符串去匹配文件名——也就是会查找文件名中字面包含\d+字符的文件,自然匹配不到你预期的序号为0、1的两个文件,最终返回空列表。
glob默认支持的通配符只有这几个:
*:匹配任意长度的任意字符?:匹配单个任意字符[]:匹配指定范围内的单个字符
解决方法
根据你的需求(匹配文件+提取最大数字序号),有两种常用实现方案:
方案1:用glob通配符粗筛后处理
如果不需要严格校验中间片段是纯数字,可以直接用*替换\d+做通配匹配,先把所有前后缀符合要求的文件捞出来,后续再提取数字计算最大值:
import glob path = "C:/Users/Desktop/Data/noupdated/FEB/batch/csv/" # 用*匹配中间的序号段 files = glob.glob(path + "noupdated_*_FEB_españa_info_csv.csv") for file in files: print(file)
方案2:遍历文件+正则严格匹配(推荐)
如果要严格保证序号段是纯数字,避免匹配到不符合命名规则的文件,可以直接遍历目标文件夹下的所有文件,用正则做精准匹配,同时可以直接提取数字计算最大序号,一步完成你的最终需求:
import os import re path = "C:/Users/Desktop/Data/noupdated/FEB/batch/csv/" # 定义正则匹配规则,括号分组捕获数字序号,$表示匹配到文件名结尾 file_pattern = re.compile(r"noupdated_(\d+)_FEB_españa_info_csv\.csv$") max_seq = -1 max_seq_file = "" for filename in os.listdir(path): match_result = file_pattern.match(filename) if match_result: current_seq = int(match_result.group(1)) full_path = os.path.join(path, filename) print(full_path) # 更新最大序号记录 if current_seq > max_seq: max_seq = current_seq max_seq_file = full_path print(f"文件名中最大数字序号为:{max_seq},对应文件路径:{max_seq_file}")
注意:正则规则里的
.需要转义为\.,否则.在正则中会匹配任意字符,可能误匹配后缀不符合要求的文件。
内容的提问来源于stack exchange,提问作者PedroSanchez95
相关产品推荐
相关产品推荐

