如何在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
相关产品推荐
相关产品推荐

