首页 > 解决方案 > 在 python 中使用 datetime 模块我需要按日期顺序对金额列进行排序

问题描述

我有一个跟踪投注的小 csv 文件,我需要在用户请求时按日期顺序生成投注。csv 样本如下所示,年 = [2],月 = [3],日 = [4]:

Aintree, Red Rum,2017,5,12,11.58, won
Aintree, Hurricane Fly,2017,5,12,11.58, won
Aintree, Murder,2017,5,12,5, lost 
Ayr, Corbiere,2016,11,3,25, lost

(投注 = [5])

我找到了一种加入日期列的方法,但无法按日期顺序对其进行排序。

对于家庭作业,我不能使用 Pandas。请您帮我解决将新行转换为日期的问题。提前致谢。

import csv
from datetime import datetime

def get_date():

    result=[]

    with open('results.csv', 'r') as csvFilein:
        reader = csv.reader(csvFilein)
        with open('resultscopy.csv', 'w') as csvFileout:
            writer = csv.writer(csvFileout)


            rows = []
            all = []

            for rows in reader:
                new_row = [''.join([rows[2], rows[3], rows[4]])] + rows[7:]
                writer.writerows(all)
                rows.append(all)
                all.append(rows)
                date = datetime.strptime(' 2017 01 11', '%Y %m %d')
                result = str(new_row) + str(rows[5])

                print(date)

            csvFilein.close()

get_date()

标签: pythoncsvsorting

解决方案


您可以将日期转换为datetime.datetime对象,然后使用datetime对象作为键进行排序:

import datetime, csv
data = [[*i[:2], datetime.datetime(*map(int, i[2:5])), *i[5:]] for i in csv.reader(open('test_csv.csv'))]
result = sorted(data, key=lambda x:x[2])

输出:

[['Ayr', ' Corbiere', datetime.datetime(2016, 11, 3, 0, 0), '25', ' lost'], ['Aintree', ' Red Rum', datetime.datetime(2017, 5, 12, 0, 0), '11.58', ' won'], ['Aintree', ' Hurricane Fly', datetime.datetime(2017, 5, 12, 0, 0), '11.58', ' won'], ['Aintree', ' Murder', datetime.datetime(2017, 5, 12, 0, 0), '5', ' lost']]

编辑:检索日期和金额:

new_data = [i[2:-1] for i in result]

输出:

[[datetime.datetime(2016, 11, 3, 0, 0), '25'], [datetime.datetime(2017, 5, 12, 0, 0), '11.58'], [datetime.datetime(2017, 5, 12, 0, 0), '11.58'], [datetime.datetime(2017, 5, 12, 0, 0), '5']]

编辑1:将结果格式化datetime为字符串:

new_result = [[f'{a.day}/{a.month}/{a.year}', b] for a, b in new_data]

输出:

[['3/11/2016', '25'], ['12/5/2017', '11.58'], ['12/5/2017', '11.58'], ['12/5/2017', '5']]

推荐阅读