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

如何对os.listdir()返回的日期格式文件名进行自定义排序?

解决方案:按月份+日期排序TXT文件

问题场景

你有一批命名格式为Month day.txt的TXT文件,os.listdir('.')返回的默认排序不符合预期:

["April 30.txt", "April 4.txt", "May 1.txt", "May 10.txt", "May 11.txt", "May 2.txt"]

期望排序结果:

["April 4.txt", "April 30.txt", "May 1.txt", "May 2.txt", "May 10.txt", "May 11.txt"]

需要实现先按月份顺序、再按日期数字排序的逻辑,此前的代码仅能按日期数字排序,无法处理月份维度的排序。

实现代码

直接使用calendar模块配合正则捕获月份和日期,以元组作为排序键即可实现需求:

import os
import re
import calendar

# 获取当前目录下的目标文件
files = os.listdir('.')
# 精准匹配"Month day.txt"格式的文件名,捕获月份和日期
pattern = re.compile(r'^(\w+) (\d+)\.txt$')
# 过滤掉不符合格式的文件(可选)
target_files = [f for f in files if pattern.match(f)]
# 排序:先按月份顺序,再按日期数字排序
sorted_files = sorted(target_files, key=lambda x: (
    calendar.month_name.index(pattern.match(x).group(1)),
    int(pattern.match(x).group(2))
))

print(sorted_files)

代码说明

  1. 正则匹配:^(\w+) (\d+)\.txt$精准匹配文件名格式,第一组捕获月份名称,第二组捕获日期数字;
  2. 月份排序依据:calendar.month_name是包含12个英文月份全称的列表(首字母大写),通过index()方法获取月份对应的数字(比如April对应4,May对应5),保证月份按自然顺序排序;
  3. 日期排序:将捕获的日期字符串转为整数,避免字符串排序的逻辑错误(比如字符串"10"会比"2"小);
  4. 排序键:元组(月份索引, 日期整数)会先比较月份索引,相同月份再比较日期数字,完全符合你的排序需求。

额外说明

如果你的文件名中月份是缩写(比如Apr 4.txt),只需将calendar.month_name替换为calendar.month_abbr即可,该列表包含月份的英文缩写(首字母大写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:25:23