2017-10-19 58 views
-2

輸入文件的Python:總和匹配的列

10/14/2017 21:02 11/04/2017  134 15 
10/14/2017 21:02 11/04/2017  134 15 
10/14/2017 21:02 11/04/2017  134 15 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 

我想要的輸出值的5列總和列匹配值1.

10/14/2017 45   //(ie. 15+15+15) 
10/13/2017 40   //(ie. 10+10+10+10) 

有人可以幫助我的Python代碼?

+0

使用熊貓...? –

+0

它的Solaris服務器我沒有熊貓,我想用csv –

+0

請說明你到目前爲止做了什麼以及出了什麼問題。這將會更有幫助。 – Nishant

回答

1

您可以使用defaultdictcollections

from collections import defaultdict 

temp = defaultdict(int) 

with open("testfile.csv", 'r') as infile: 

    for line in infile: 
     fields = line.split() 
     temp[fields[0]] += int(fields[-1]) 

print(temp) 

# defaultdict(int, {'10/13/2017': 40, '10/14/2017': 45}) 
+0

這個作品我得到了這種形式的輸出defaultdict(int,{'10/13/2017':40,'10/14/2017':45}) –

+0

感謝stamaimer –

-1

假設第1列中的日期是連續的,您可以逐行讀取CSV,並且如果日期與前一日期相同,請添加該行中的第5列以保持總計。如果日期不同,則輸出總數,並在下一個日期重新開始從零開始的總數。

1

解決此類問題的一個好方法是嘗試將其分解爲子問題並分別解決每個問題。此問題的細分可能是:

  1. 如何提取輸入文件中每行的內容?考慮一下分隔每列的內容。
  2. 如何爲第0列中的每個值存儲第5列的運行總數?您需要某種數據結構,理想情況下可以讓您快速查看第0列值的總計。
  3. 當我完成後,如何將這些總計和第0列值寫出到我的輸出文件中?

我會鼓勵你在尋找某人給你的代碼之前繼續自己解決問題。

0
data = """10/14/2017 21:02 11/04/2017  134 15 
10/14/2017 21:02 11/04/2017  134 15 
10/14/2017 21:02 11/04/2017  134 15 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 
10/13/2017 20:58 11/03/2017  132 10 
""" 

result = {} 

for line in data.splitlines(): 
    key = line.split(' ')[0] 
    value = line.split(' ')[11] 
    if result.get(key): 
     result[key] = result[key] + int(value) 
    else: 
     result[key] = int(value) 
print(result) 
+0

使用'-1'好得多由@stamaimer顯示。 – Nishant