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

如何改进Python脚本实现文件名的智能拆分与信息提取?

解决可变结构文件名的信息提取问题

这个问题我碰到过类似的,核心就是要不依赖固定数量的下划线,而是从文件名的末尾反向提取数字部分,前面的内容统一作为前缀。给你两种实用的解决方案:

方法一:基于列表拆分的反向提取

这种方法简单直观,先处理掉文件后缀,再拆分所有下划线部分,然后从列表末尾取最后两个数字元素,前面的元素拼接成前缀:

import os

for file in os.listdir("C:\\alt\\her"):
    if not file:
        continue
    # 去掉文件后缀(比如.txt),用os.path.splitext比手动split更可靠
    filename_no_ext = os.path.splitext(file)[0]
    # 把文件名按下划线拆分成列表
    parts = filename_no_ext.split("_")
    # 确保文件名格式符合要求(至少有前缀+两个数字)
    if len(parts) >= 3:
        # 倒数第二个元素是JinkinsBuild,最后一个是TestJob
        JinkinsBuild = parts[-2]
        TestJob = parts[-1]
        # 前面所有元素用下划线拼接成Namearray
        Namearray = "_".join(parts[:-2])
        # 验证输出
        print(f">>>Namearray = {Namearray}")
        print(f">>>JinkinsBuild = {JinkinsBuild}")
        print(f">>>TestJob = {TestJob}")
    else:
        # 跳过格式不符合的文件,避免报错
        print(f"跳过格式无效的文件: {file}")

方法二:正则表达式匹配(更严谨)

如果需要确保最后两个部分一定是数字,用正则表达式会更靠谱,能精准匹配符合规则的文件名,自动过滤不符合的:

import os
import re

# 正则规则:匹配前缀(任意字符直到最后两个下划线数字)+ 两个数字组 + 可选的.txt后缀
filename_pattern = re.compile(r'^(.*)_(\d+)_(\d+)(?:\.txt)?$')

for file in os.listdir("C:\\alt\\her"):
    if not file:
        continue
    # 匹配文件名
    match_result = filename_pattern.match(file)
    if match_result:
        # 提取分组内容
        Namearray = match_result.group(1)
        JinkinsBuild = match_result.group(2)
        TestJob = match_result.group(3)
        # 验证输出
        print(f">>>Namearray = {Namearray}")
        print(f">>>JinkinsBuild = {JinkinsBuild}")
        print(f">>>TestJob = {TestJob}")
    else:
        print(f"跳过格式无效的文件: {file}")

两种方法的对比

  • 方法一适合文件名格式比较规范的场景,代码易读易维护;
  • 方法二更严谨,能确保最后两个部分是数字,避免非数字内容被误提取,适合对数据准确性要求高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:01