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

如何解决无前导零年积日导致的日期命名文件排序报错?

解决无前导零年积日的文件排序问题

我之前也踩过这个坑!%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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:25