2016-03-23 46 views
0

我有一個文件路徑充滿了CSV文件。我正在使用Python glob打開它們,並使用csv.DictReader()來讀取它們,並將數據解析爲字母作爲關鍵字的字典。在不同的字典中爲同一個鍵求和多個值Python

在CSV文件中的數據是這樣的:

CSVfile1:

Name,A,B,C,D,Date 
John,-1,2,4.0,-5.1,3/23/2016 
Jacob,0,3,2.0,-2.3,3/23/2016 
Jinglehimmer,1,100,5.0,-.1,3/23/2016 

CSVfile2:

Name,A,B,C,D,Date 
John,5,4,1.0,-1,3/24/2016 
Jacob,0,1,7.0,-.1,3/24/2016 
Schmidt,10,9,8,7,3/24/2016 

我試圖總結在ABC數據和D列在指定日期(例如過去2天)內的每個名稱。例如,我試圖讓字典的一個新的列表,看起來像這樣:

{Name: John, A: 4, B: 6, C: 5.0, D: -6.1, Date: 2} 
{Name: Jacob, A: 0, B: 4, C: 9.0, D: -2.4, Date: 2} 
{Name: Jinglehimmer, etc.} 
{Name: Schmidt, etc.} 

這裏是我到目前爲止,我知道作品的代碼。這將打開每個CSV並創建一個字典的每一行,讓我通過字典迭代:

import csv 
import glob 

path = "." 

newdict = {} 

for filename in glob.glob(path): 
    with open(filename) as csv_file: 
     for row in csv.DictReader(csv_file): 

編輯: 我想簡單地所有關鍵值相加成一個新的字典,但我碰到一個int + str錯誤。

for k in row.keys(): 
    newdict[k] = newdict.get(k,0) + row[k] 

我也不清楚如何被Date:鍵來過濾數據的只得到x天。

任何幫助或點在正確的方向非常感謝。

+1

有什麼不同的方式的一羣人,請問是什麼問題? –

+0

@PeterWood好問題。我試着簡單地開始,總結所有CSV的所有值。但是這打破了,因爲我不能添加int和str。 對於row.keys中的k(): newdict [k] = newdict.get(k,0)+ row [k] – tulanejosh

+0

好吧,把它放在你的問題中。這就是你需要幫助的。 –

回答

1

以下辦法應該工作:

import csv 
import glob 
from datetime import datetime, timedelta, date 


days = 2 
since = datetime.combine(date.today(), datetime.min.time()) - timedelta(days = days) 
required_fields = ['A', 'B', 'C', 'D'] 

path = "." 
newdict = {} 

output = {} 

for filename in glob.glob(path): 
    with open(filename) as csv_file: 
     for row in csv.DictReader(csv_file): 
      if datetime.strptime(row['Date'], '%m/%d/%Y') >= since: 
       name = row['Name'] 

       try: 
        cur_entry = output[name] 
        entry = {field : cur_entry[field] + float(row[field]) for field in required_fields} 
       except KeyError as e: 
        entry = {field : float(row[field]) for field in required_fields} 
        entry['Date'] = days 

       output[name] = entry 

for name, entry in output.items():     
    print name, entry 

這對於你給將顯示數據:

Jacob {'A': 0.0, 'C': 9.0, 'B': 4.0, 'D': -2.4} 
Jinglehimmer {'A': 1.0, 'Date': 2, 'C': 5.0, 'B': 100.0, 'D': -0.1} 
John {'A': 4.0, 'C': 5.0, 'B': 6.0, 'D': -6.1} 
Schmidt {'A': 10.0, 'Date': 2, 'C': 8.0, 'B': 9.0, 'D': 7.0} 
相關問題