如何解决无前导零年积日导致的日期命名文件排序报错?
解决无前导零年积日的文件排序问题
我之前也踩过这个坑!%j格式符确实要求年积日必须是三位带前导零的数字,而你的文件名里是无前导零的(比如96),直接用strptime肯定会报错。给你两个简单实用的解决办法:
方法1:手动解析日期组件,摆脱%j限制
这种方法更灵活,直接拆分文件名的各个部分,自己计算目标日期:
from datetime import datetime, timedelta import glob def keyfunc(value): # 拆分文件名,记得根据实际后缀调整(这里用.txt示例,换成.zip也可以) filename_parts = value.replace('.txt', '').split('_') year = int(filename_parts[1]) day_of_year = int(filename_parts[2]) hour = int(filename_parts[3]) minute = int(filename_parts[4]) second = int(filename_parts[5]) # 从当年1月1日开始累加天数(年积日从1开始,所以要减1) base_date = datetime(year, 1, 1) target_datetime = base_date + timedelta( days=day_of_year - 1, hours=hour, minutes=minute, seconds=second ) return target_datetime # 执行排序 rate_file_list = sorted(glob.glob('adq_201*.txt'), key=keyfunc)
方法2:补全年积日的前导零,适配%j格式
如果还是想用strptime,可以先把年积日补成三位带前导零的格式,再传入解析:
from datetime import datetime import glob def keyfunc(value): # 拆分文件名各部分 filename_parts = value.split('_') # 给年积日补前导零,确保是三位数字 filename_parts[2] = filename_parts[2].zfill(3) # 重新拼接成符合格式的字符串 formatted_filename = '_'.join(filename_parts) # 用strptime解析 return datetime.strptime(formatted_filename, "adq_%Y_%j_%H_%M_%S.txt") # 执行排序 rate_file_list = sorted(glob.glob('adq_201*.txt'), key=keyfunc)
小提醒:如果你的实际文件后缀是
.zip,记得把代码里的.txt替换成.zip哦!
内容的提问来源于stack exchange,提问作者user7846046
相关产品推荐
相关产品推荐

