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

Python新手求助:如何从批量索引文件名中提取目标编号并使用?

解决文件名索引提取问题

嘿,我懂你的困扰!你当前的正则表达式r'\d+'会匹配文件名里第一个出现的数字序列——也就是sample1里的1,但你真正想要的是文件名末尾用来区分文件的那个索引数字(比如sample1_..._1_.txt里的1)对吧?

问题根源

re.search()会从字符串开头开始找第一个符合正则的匹配项,所以它优先找到了sample后面的1,而不是你需要的最后那个索引数字。

解决方案:精准匹配目标数字

我们可以调整正则表达式,专门匹配文件名末尾的_数字_.txt格式,这样就能精准捕获到目标索引:

import re
import os

def get_numbers_from_filename(filename):
    # 正则匹配:下划线 + 数字序列 + 下划线 + .txt(字符串结尾)
    match = re.search(r'_(\d+)_\.txt$', filename)
    if match:
        return match.group(1)  # 返回捕获的数字
    return None  # 处理不符合格式的文件,避免报错

# 遍历文件夹并提取数字
for filename in os.listdir('input/'):
    index_num = get_numbers_from_filename(filename)
    if index_num:
        print(index_num)

正则表达式说明

  • _:匹配文件名里的下划线
  • (\d+):捕获一个或多个数字(这就是我们要的索引)
  • _\.txt$:匹配下划线 + 点(转义后的.)+ txt,并且$表示必须是字符串结尾,确保我们匹配的是最后那部分

备选方案:字符串分割(依赖固定格式)

如果你的文件名格式永远是前缀_..._索引_.txt,也可以用字符串分割的方式提取:

import os

def get_numbers_from_filename(filename):
    # 按下划线分割文件名
    parts = filename.split('_')
    # 观察格式:分割后倒数第三个元素就是索引数字(比如['sample1', ..., '1', '', 'txt'])
    if len(parts) >= 3:
        return parts[-3]
    return None

for filename in os.listdir('input/'):
    index_num = get_numbers_from_filename(filename)
    if index_num:
        print(index_num)

这个方法更简单,但缺点是如果文件名格式有变化(比如下划线数量改变)就会失效,正则的方法更健壮。

内容的提问来源于stack exchange,提问作者Cashoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:11:55