- 论坛徽章:
- 8
|
二楼的 date 转换后再排序 是一个办法,我也测试了。但发现有两个问题,第一个速度比较慢,楼主的示例文件在我的电脑上跑出结果大概需要15秒。第二个,排序的结果不是稳定的,即如果两个时间值相同时,和原始次序不太一样。
我一开始想用sort 对原来的字符串 直接排序,月份的排序是关键, sort --help 一看它有-M 选项 支持月份排序,但在我的电脑上试了 -M 选项不起作用的,不知是只支持JAN 这种三字符的月份还是其它的原因。
后来想想还是上Python**,且python的sort是稳定的排序。
仅供参考,示例文件跑完大概在0.3秒,大文件未测试,不知会如何。
- #!/usr/bin/python3
- from enum import Enum
- class Month(Enum):
- (January,February,March,April,May,June,
- July,August,September,October,November,December) = range(1,13)
- with open("1.txt","r",encoding="utf-8") as f:
- s = (line.split() for line in f)
- res = sorted(s,key=lambda line: (line[3],Month[line[1]].value,line[2],line[0])) #按 年,月,日,时间 排序
- with open("sorted.txt","w",encoding="utf-8") as fw:
- for line in res:
- fw.writelines("{}\n".format(" ".join(line)))
复制代码 |
|