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

如何在Python中移除列表内文件名中的时间戳值

嘿,这个需求我经常碰到,给你两种实用的Python实现方案,根据你的文件名格式选就行:

方法1:字符串分割(适合时间戳固定在最后一个下划线之后的场景)

如果你的文件名格式是「前缀_时间戳」或者「前缀_时间戳.后缀」,且时间戳总是跟在最后一个下划线后面,用字符串分割的方法简单直接,不需要额外依赖:

a = ["abc_20200124T141028.csv", "bcd_20200124T141052", "xyz_20230510T093015.txt"]

cleaned_filenames = []
for filename in a:
    # 找到最后一个下划线的位置
    last_underscore_pos = filename.rfind('_')
    if last_underscore_pos != -1:
        # 提取前缀部分
        prefix = filename[:last_underscore_pos]
        # 检查是否有文件后缀(比如.csv)
        last_dot_pos = filename.rfind('.')
        # 确保后缀在时间戳之后(避免前缀里有点的情况)
        if last_dot_pos != -1 and last_dot_pos > last_underscore_pos:
            suffix = filename[last_dot_pos:]
            cleaned_name = f"{prefix}{suffix}"
        else:
            cleaned_name = prefix
        cleaned_filenames.append(cleaned_name)
    else:
        # 没有下划线的文件名直接保留
        cleaned_filenames.append(filename)

print(cleaned_filenames)
# 输出结果: ['abc.csv', 'bcd', 'xyz.txt']
方法2:正则表达式(更灵活通用)

如果你的时间戳格式固定(比如YYYYMMDDTHHMMSS这种8位日期+T+6位时间的模式),用正则表达式可以精准匹配并替换掉时间戳,不管它在文件名的哪个位置(只要是_时间戳的格式):

import re

a = ["abc_20200124T141028.csv", "bcd_20200124T141052", "xyz_20230510T093015.txt"]

# 正则模式:匹配下划线+8位数字+T+6位数字的组合
timestamp_pattern = r'_\d{8}T\d{6}'
cleaned_filenames = [re.sub(timestamp_pattern, '', fname) for fname in a]

print(cleaned_filenames)
# 输出结果: ['abc.csv', 'bcd', 'xyz.txt']

小提示

如果你的时间戳格式有变化(比如包含秒的小数部分,像20200124T141028.123),可以把正则模式调整为:

timestamp_pattern = r'_\d{8}T\d{6}(?:\.\d+)?'

这样就能匹配带小数秒的时间戳了。

如果你的文件名还有其他特殊情况(比如多个下划线、时间戳位置不固定),可以补充细节,我再帮你调整方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:32:48