如何用Python去除CSV文件名中的时间后缀?
解决方案
先说说你代码里的问题:
- 直接使用了
SSP_AP_INVOICE_DISTRIBUTIONS_17022023072701这个未定义的标识符,应该用你定义好的字符串变量s - 你的需求是保留原文件名结构并截断多余时间部分,不是把日期转成
dd-mm-yyyy格式,原代码的输出方向不符合需求
方法一:字符串切片(简单高效,适合固定格式文件名)
因为文件名格式固定,直接通过切片截取需要的部分即可:
s = "SSP_AP_INVOICE_DISTRIBUTIONS_17022023072701.csv" # 拆分文件名主体和后缀 name_body, ext = s.rsplit('.', 1) # 去掉文件名主体最后6位多余的时间字符,再拼接后缀 new_filename = f"{name_body[:-6]}.{ext}" print(new_filename) # 输出: SSP_AP_INVOICE_DISTRIBUTIONS_17022023.csv
或者通过定位最后一个下划线来处理,逻辑更直观:
s = "SSP_AP_INVOICE_DISTRIBUTIONS_17022023072701.csv" last_underscore_pos = s.rfind('_') # 截取前缀、前8位日期,再拼接后缀 new_filename = f"{s[:last_underscore_pos+1]}{s[last_underscore_pos+1:last_underscore_pos+9]}.csv" print(new_filename)
方法二:日期解析(更严谨,适配日期格式可能变化的场景)
如果想用strptime来处理,需要先提取完整的日期时间片段,解析后再格式化回需要的日期格式,最后拼接文件名:
import datetime as dt s = "SSP_AP_INVOICE_DISTRIBUTIONS_17022023072701.csv" # 拆分文件名前缀和日期时间+后缀部分 prefix, rest_part = s.split('_', maxsplit=3) datetime_str, ext = rest_part.split('.', 1) # 解析完整的日期时间字符串 dt_obj = dt.datetime.strptime(datetime_str, '%d%m%Y%H%M%S') # 格式化为仅保留日/月/年的字符串 short_date = dt_obj.strftime('%d%m%Y') # 拼接生成新文件名 new_filename = f"{prefix}_{short_date}.{ext}" print(new_filename) # 输出: SSP_AP_INVOICE_DISTRIBUTIONS_17022023.csv
原代码错误修正(仅展示正确解析方式,非最终文件名需求)
如果只是修正你原代码的语法和逻辑问题:
import datetime as dt s = "SSP_AP_INVOICE_DISTRIBUTIONS_17022023072701.csv" # 提取日期部分的前8位字符 date_str = s.split('_')[-1].split('.')[0][:8] temp = dt.datetime.strptime(date_str, '%d%m%Y') final = temp.strftime('%d-%m-%Y') print(final) # 输出: 17-02-2023
内容的提问来源于stack exchange,提问作者Thentu matcha
相关产品推荐
相关产品推荐

