【问题标题】:What's wrong with this code for sorting csv file according to date?根据日期对 csv 文件进行排序的代码有什么问题?
【发布时间】:2023-04-01 00:45:01
【问题描述】:

我有这个 csv 文件,看起来像这样;

datetime_period,value
01 Apr 2021 00:00,92.85
01 Apr 2021 00:30,91.73
11 Feb 2021 19:30,88.58
11 Feb 2021 20:00,88.58
13 Jan 2021 13:00,80.49
13 Jan 2021 13:30,81.95

我想根据datetime_period 列中的日期时间对这个 csv 进行排序。

我使用此链接Sorting a csv object by dates in python 作为指南。

这是我的代码;

data = csv.reader(open(csv_file_path, 'r'))
data = sorted(data, key=lambda row: datetime.strptime(row[0], "%d %b %Y %H:%M"))

我得到了错误;

ValueError: time data 'time_period' does not match format '%d %b %Y %H:%M'
python-BaseException

我查看了代码并认为我的代码确实与日期时间格式匹配。 有人可以告诉我代码有什么问题或提供替代解决方案吗?谢谢。

我正在使用 python 3.8.5

【问题讨论】:

    标签: python python-3.x csv sorting


    【解决方案1】:

    您需要跳过文件开头的标题行。这可以通过将csv.reader 对象传递给内置的next() 函数以对其进行一次迭代来轻松完成。下面的代码显示了如何做到这一点,并在读取文件内容后正确关闭文件。

    import csv
    from datetime import datetime
    
    csv_file_path = 'time_data.csv'
    
    with open(csv_file_path, 'r', newline='') as file:
        reader = csv.reader(file)
        next(reader)  # Skip over header row.
        data = sorted(reader, key=lambda row: datetime.strptime(row[0], "%d %b %Y %H:%M"))
    
    print(data)
    

    【讨论】:

      【解决方案2】:

      您正在尝试对不包含 datetime 值的标题行进行排序。

      解决此问题的一种方法是在排序之前将标头 pop 去掉,然后再将它们添加回来。

      data = [line for line in csv.reader(open('test.csv', 'r'))]
      
      headers = data.pop(0)
      
      data = sorted(data, key=lambda row: datetime.strptime(row[0], "%d %b %Y %H:%M"))
      #[['13 Jan 2021 13:00', '80.49'], ['13 Jan 2021 13:30', '81.95'], ['11 Feb 2021 19:30', '88.58'], ['11 Feb 2021 20:00', '88.58'], ['01 Apr 2021 00:00', '92.85'], ['01 Apr 2021 00:30', '91.73']]
      
      out = [headers] + data
      
      #[['datetime_period', 'value'], ['13 Jan 2021 13:00', '80.49'], ['13 Jan 2021 13:30', '81.95'], ['11 Feb 2021 19:30', '88.58'], ['11 Feb 2021 20:00', '88.58'], ['01 Apr 2021 00:00', '92.85'], ['01 Apr 2021 00:30', '91.73']]
      

      【讨论】:

        猜你喜欢
        • 2018-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 2014-03-11
        • 1970-01-01
        • 2019-03-17
        相关资源
        最近更新 更多