You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 23:51:25