Python CSV文件用于循环和日期比较

时间:2017-03-05 14:11:01

标签: python csv

嘿,伙计们,我是新手,学习蟒蛇,我觉得我对这个问题有点不合时宜。我正在寻找如何处理的建议。

我有一个主csv文件main.csv包含许多字段,但四个重要的字段是ID,Name,Date和Status。只是为了澄清,名称和ID字段不是唯一的。相同的将出现在多行上。

我正在尝试使用for循环来浏览主文件并按名称和ID分析结果,在每个独特的情况下,我想比较日期并选择未来最远的日期。

我到目前为止,现在我正在努力。下面是我的脚本和输出到目前为止

脚本

import csv

s=open('combined.csv')
mainfile = csv.reader(s)

id = ['1','4']
Name = ['Anthony', 'Bob']
Status = ['New', 'Old']

for r in mainfile:
    for m in Name:
        for t in id:
            if r[10] in (None, ""):
                pass
            elif r[3] == m:
                if r[5] == t:
                    print (r[3], r[5], r[6], r[11])

输出示例:

('Anthony', '1', '10', '4/3/2017')
('Anthony', '1', '11', '5/2/2017')
('Anthony', '1', '13', '12/30/2017'
('Anthony', '1', '15', '8/20/2017')
('Anthony', '4', '17', '2/3/2018')
('Anthony', '4', '18', '3/28/2017')
('Bob', '1', '111', '4/3/2017')
('Bob', '1', '200', '5/2/2017')
('Bob', '1', '113', '12/30/2017')
('Bob', '1', '115', '8/20/2017')
('Bob', '4', '117', '2/3/2018')
('Bob', '4', '118', '3/28/2017')

我被挂了,因为我不想查看名称和ID字段的唯一位置,并比较所有这些日期,并在将来为每个日期返回最远的日期,然后将其打印到文件中。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您需要datetime使用.strptime方法,sorted使用key参数。

from datetime import datetime

def get_date(date):
    return datetime.strptime('%m/%d/%Y', date)

ids = ('1', '4')
names = ('Anthony', 'Bob')
lines = []

with open('combined.csv', 'r', newline='') as s:
    mainfile = csv.reader(s)

    for r in mainfile:
        if r[10] and r[3] in names and r[5] in ids:
            lines.append((r[3], r[5], r[6], r[11]))

lines = sorted(lines, key=lambda line: get_date(line[3]))

for line in lines:
    print(line)

像这样的东西。未经测试。