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

Python 3中如何移除文件名扩展名前的日期且保留非日期数字?

解决文件名中移除扩展名前日期并转小写的问题

你的问题出在之前的正则表达式是全局匹配所有数字、点和横杠,没有针对性地定位到「扩展名前的末尾日期」,所以误删了文件名里的其他数字(比如120),还把扩展名的点也删掉了。下面给你一个精准的解决方案:

思路拆解

  1. 先把每个文件名拆分为「主名称部分」和「扩展名部分」(带点),避免误改扩展名的点;
  2. 只针对主名称部分,匹配并移除末尾的日期格式(比如1.4.2016或5-2-2018);
  3. 把处理后的主名称转小写,再和扩展名拼接得到最终文件名。

完整代码实现

import re
import os

file_name_list = ['ABDCD Pattern Raw Data 1.4.2016.xlsx', 'Jack Raw Data 1.2.2016.xlsx', 'Farmers holdings 1.1.2016.xlsx', 'Anne Raw Data 1.3.2016.csv', '120 Brewers 5-2-2018.txt']

output_list = []
for filename in file_name_list:
    # 拆分主名称和扩展名(扩展名保留原有的点)
    name_part, ext_part = os.path.splitext(filename)
    # 正则匹配并移除主名称末尾的日期:空格+数字[.-]数字[.-]数字的格式
    cleaned_name = re.sub(r'\s+\d+[.-]\d+[.-]\d+$', '', name_part)
    # 转小写后拼接扩展名
    final_name = f"{cleaned_name.lower()}{ext_part}"
    output_list.append(final_name)

print(output_list)

代码说明

  • os.path.splitext(filename):安全拆分文件名和扩展名,比如对于120 Brewers 5-2-2018.txt,会得到name_part='120 Brewers 5-2-2018',ext_part='.txt';
  • 正则r'\s+\d+[.-]\d+[.-]\d+$':
    • \s+:匹配日期前的一个或多个空格;
    • \d+[.-]\d+[.-]\d+:匹配「数字+点/横杠+数字+点/横杠+数字」的日期格式;
    • $:确保只匹配主名称末尾的日期,不会影响前面的数字(比如120);
  • cleaned_name.lower():把处理后的主名称转为小写,再和原扩展名拼接。

运行结果

运行后会得到你想要的输出:

['abdcd pattern raw data.xlsx', 'jack raw data.xlsx', 'farmers holdings.xlsx', 'anne raw data.csv', '120 brewers.txt']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:52