gpt4 book ai didi

python - 在 Python 中按日期对 CSV 进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:19 25 4
gpt4 key购买 nike

我正在尝试对 CSV 文件进行排序,我希望项目按日期倒序排序:最新的在前。

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

就此而言,这很简单,但我如何比较日期?

最佳答案

我建议安装出色的 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 的 dayfirstyearfirst 选项更改此行为。 (参见 http://labix.org/python-dateutil)

print(type(date))
# <type 'datetime.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 包,那么您将必须使用自己的方法将日期字符串转换为日期时间对象。这需要更多的工作,因为您必须定义格式。下面,'%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.strftime() 方法。

关于python - 在 Python 中按日期对 CSV 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1773909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com