我目前正在尝试开发一个程序,该程序可以从文本文件读取数据,并返回工作时间最长的一对员工。我决定采用.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,这对我来说是很重要的任务。谢谢!
答案 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)]]