簡體   English   中英

使用Python讀取.CSV文件,然后比較列/行

[英]Using Python to read .CSV files and then compare the columns/rows

我目前正在嘗試開發一個程序,該程序從文本文件中讀取數據,並返回工作時間最長的一對員工。 我決定采用.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,這對我來說是很重要的任務。 謝謝!

從您寫的內容中了解到,我認為您需要的是這樣的東西:

#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。 在這種情況下,與熊貓合作會更有效率

您可以使用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)]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM