当前位置:  开发笔记 > 编程语言 > 正文

在Python中按日期排序CSV

如何解决《在Python中按日期排序CSV》经验,为你挑选了1个好方法。

我正在尝试对CSV文件进行排序,我希望按日期按相反的顺序排序项目:最新的.

def SortCsvByField( filename, fieldNo, sep = ',' ):
   records = [line.split(sep) for line in file(filename)]

至于它很简单,但我如何比较日期?



1> unutbu..:

我建议安装优秀的dateutil模块.(在Ubuntu/Debian中,它由python-dateutil包提供).

dateutil可以将日期字符串解析为datetime对象:它可以处理许多不同的日期格式,而无需抬起手指(*):

import dateutil.parser as dparser
date=dparser.parse("Mon May 7 1883 10:36:28")
print(date)
# 1883-05-07 10:36:28

date=dparser.parse("1685-3-21")
print(date)
# 1685-03-21 00:00:00

date=dparser.parse("12/17/1770")
print(date)
# 1770-12-17 00:00:00

请注意,解析将"12/17/1770"解释为"MM/DD/YYYY"形式.您可以使用parse dayfirstyearfirstoptions 更改此行为.(见http://labix.org/python-dateutil)

print(type(date))
# 

datetime对象可以轻松排序:

dates=[dparser.parse("Mon May 7 1883 10:36:28"),dparser.parse("1685-3-21"),dparser.parse("12/17/1770"),]
dates.sort()
print(dates)
# [datetime.date(1685, 3, 21), datetime.date(1770, 12, 17), datetime.date(1833, 5, 7)]

如果您不想安装dateutil包,那么您必须使用自己的方法将日期字符串转换为datetime对象.这需要更多的工作,因为您必须定义格式.下面,'%Y-%m-%d'定义YYYY-MM-DD格式.有关可用格式代码的更多信息,请参见http://au2.php.net/strftime (或strftime的手册页).

例如,

dates=[datetime.datetime.strptime(date_str,'%Y-%m-%d') for date_str in
       ('1883-5-7','1685-3-21','1770-12-17',)]
print([str(date) for date in dates])
# ['1883-05-07 00:00:00', '1685-03-21 00:00:00', '1770-12-17 00:00:00']
dates.sort()
print([str(date) for date in dates])
# ['1685-03-21 00:00:00', '1770-12-17 00:00:00', '1883-05-07 00:00:00']

要在将datetime对象转换回可打印字符串时控制格式,可以使用datetime.datetime.strftime()方法.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有