使用Python读取.CSV文件,然后比较列/行

时间:2019-05-29 15:24:46

标签: python list csv

我目前正在尝试开发一个程序,该程序可以从文本文件读取数据,并返回工作时间最长的一对员工。我决定采用.CSV格式,因为它仍然是纯文本格式,但以逗号分隔。

示例:

EmpID,ProjectID,DateFrom,DateTo
1,A,2014-11-01,2015-05-01
2,B,2013-12-06,2014-10-06
2,C,2014-01-07,2016-03-07
3,B,2015-06-04,2017-09-04
5,C,2014-10-01,2015-12-01
1,A,2013-03-07,2015-11-07
2,C,2015-07-09,2019-01-19
3,B,2013-11-13,2014-03-13
4,C,2016-02-14,NULL
5,D,2014-03-15,2015-11-09

现在,我学习了如何读取.CSV文件,但是我不确定什么是最好的方法(比较值等)。现在,我认为这是最干净的选择:

import csv

with open('data.csv', 'r') as f:
  reader = csv.reader(f)
  your_list = list(reader)

print(your_list)

如果最好的方法是比较列表的索引,那么我只想提些建议。我也在考虑字典,但是我不确定,因此我在这里问的原因是:)而且SQL不是一个选择,即使使用SQL很容易。不好意思,如果这是一个不好的问题,但是我目前正在学习Python,这对我来说是很重要的任务。谢谢!

2 个答案:

答案 0 :(得分:1)

据您的了解,我认为您所需要的是这样的:

#read csv, and split on "," the line
csv_file = csv.reader(open('data.csv', "rb"), delimiter=",")

for item in csv_file:
#do your work

如果您有大量数据,也许您也可以看看Pandas。在这种情况下,与熊猫一起工作会更有效率

答案 1 :(得分:1)

您可以使用datetime程序包来检查经过的总时间。在csv文件中创建人员列表,然后根据经过时间对列表进行排序。 CSV文件的前8行(因为NULL未定义!):

1,A,2014-11-01,2015-05-01
2,B,2013-12-06,2014-10-06
2,C,2014-01-07,2016-03-07
3,B,2015-06-04,2017-09-04
5,C,2014-10-01,2015-12-01
1,A,2013-03-07,2015-11-07

您可以使用此:

from datetime import datetime
with open('file.txt', 'r') as file:
    my_list = list()
    for line in file:      
        list_ = line.split(',')
        dt1 = datetime.strptime(list_[2], '%Y-%M-%d')
        dt2 = datetime.strptime(list_[3][:10], '%Y-%M-%d')
        my_list.append(list_[:2] + [dt2-dt1])
        my_list.sort(key=lambda x: x[2])
print(my_list)

输出:

[['3', 'B', datetime.timedelta(days=364, seconds=85920)], ['1', 'A', datetime.timedelta(days=364, seconds=86040)], ['2', 'B', datetime.timedelta(days=364, seconds=86280)], ['5', 'C', datetime.timedelta(days=365, seconds=120)], ['2', 'C', datetime.timedelta(days=730, seconds=120)], ['1', 'A', datetime.timedelta(days=730, seconds=480)], ['3', 'B', datetime.timedelta(days=731, seconds=180)], ['2', 'C', datetime.timedelta(days=1470, seconds=86040)]]
相关问题