我有以下清单:
dates = ['august_2020.xlsb',
'april_2020.xlsb',
'december_2020_part1.xlsb',
'january_2021.xlsb',
'february_2021.xlsb',
'may_2020.xlsb',
'september_2020_part2.xlsb',
'november_2020_part2.xlsb',
'june_2020.xlsb',
'july_2020.xlsb',
'january_2020.xlsb',
'december_2020_part2.xlsb',
'november_2020_part1.xlsb',
'october_2020_part2.xlsb',
'february_2020.xlsb',
'march_2020.xlsb',
'october_2020_part1.xlsb',
'september_2020_part1.xlsb']
我要做的是按月份和年份对这些字符串进行排序,例如我的最终列表应该如下所示:
dates = ['january_2020.xlsb',
'february_2020.xlsb',
'march_2020.xlsb',
'april_2020.xlsb',
'may_2020.xlsb',
'june_2020.xlsb',
'july_2020.xlsb',
'august_2020.xlsb',
'september_2020_part1.xlsb',
'september_2020_part2.xlsb',
'october_2020_part1.xlsb',
'october_2020_part2.xlsb',
'november_2020_part1.xlsb',
'november_2020_part2.xlsb',
'december_2020_part1.xlsb',
'december_2020_part2.xlsb',
'january_2021.xlsb',
'february_2021.xlsb'
]
我试过使用: dates.sort()
但我得到的是:
dates = ['april_2020.xlsb',
'august_2020.xlsb',
'december_2020_part1.xlsb',
'december_2020_part2.xlsb',
'february_2020.xlsb',
'february_2021.xlsb',
'january_2020.xlsb',
'january_2021.xlsb',
'july_2020.xlsb',
'june_2020.xlsb',
'march_2020.xlsb',
'may_2020.xlsb',
'november_2020_part1.xlsb',
'november_2020_part2.xlsb',
'october_2020_part1.xlsb',
'october_2020_part2.xlsb',
'september_2020_part1.xlsb',
'september_2020_part2.xlsb']
我也尝试过使用以下代码:
from calendar import month_name
month_lookup = [x.lower() for x in list(month_name)]
sorted(dates, key = month_lookup.index)
但是我得到了这个错误: ''april_2020.xlsb' is not in list
我的解决方案似乎都不管用。如果有人知道如何得到所需的产出,我将非常感谢你的帮助。
2条答案
按热度按时间arknldoa1#
排序使用
date
系统,您可以转换为datetime
物体。两者都匹配
december_2020_part2.xlsb
以及february_2020.xlsb
您需要同时拆分点和下划线,然后将前两部分转换为datetime
您可以返回datetime和文件名(以元组的形式),因此当日期相同时,它使用文件名(包含part1
或者part2
)就这样吧也可以通过返回一个包含3个值的元组来完成:year、month和filename
w8biq8rn2#
这里有一个解决方案
calendar
您使用了:我们通过正则表达式提取月份和年份,然后优先排序年第一,月第二(大写的第一个字母,然后查找),最后回落到字典顺序,返回3元组。