2011-10-07 57 views
0

我是Python的新手,嘗試使用大約30個csv文件,所有文件都具有相同的標題,但每個文件中的數據都不同,併合併爲一個。 現在我假裝我只有兩個文件需要,其中一個帶有ID號碼1,2和3的信息,另一個帶有4,5號碼頭的信息 到目前爲止,我已經設法將這些文件帶入並使用dictreader創建一串字典,但是我無法弄清楚如何獲取與每個鍵相對應的值,並將它們放在一個大文件中,並將所有數據放在一起。我在使用dictreader之後加入兩個csv文件

下面是我多遠,到目前爲止得到:)

for filename in os.listdir(os.getcwd()): 
    root, ext = os.path.splitext(filename) 
    if root.startswith('file1') and ext == '.csv': 
     upload1 = filename 
    if root.startswith('file2') and ext == '.csv': 
     upload2 = filename 

file_upload1 = open(upload1, 'rU') 
data_upload1 = csv.DictReader(file_upload1) 

for row in data_upload1: 
    print row 

與同爲upload2。然後我得到這樣的輸出;

{'ID': '1', 'name': 'bert', 'age': '30'} 
{'ID': '2', 'name': 'ernie', 'age': '40'} 
{'ID': '3', 'name': 'pinky', 'age': '50'} 
{'ID': '4', 'name': 'perky', 'age': '60'} 
etc 

而我很想做是與標識1,2,3,4,5,6一列,然後爲每個相應名稱的列,一個CSV文件,每個對應的年齡等

有人可以請建議我怎麼能做到這一點? 對不起菜鳥問題。

回答

0

當您調用csv.DictReader()時,您將得到一個字符串生成器。假設我們有2個文件:「f1.csv」和「f2.csv」,並且每個文件都包含多個記錄。


    import csv 

    fp1, fp2 = open("f1.csv"), open("f2.csv") 
    ld1, ld2 = csv.DictReader(fp1), csv.DictReader(fp2) #ld1 and ld2 are *generators* 

    res = [] #our result will be stored here(LIST of dicts) 
    ds = [ld1, ld2] #list of generators 

然後,迭代DS的同時,加入從每個字典每KV對至RES字典,像這樣:

for d in ds: #each d is a generator 
    for e in d: #each e is a dict 
     res.append(e) 

這水庫現在是一個列表,它包含來自兩個類型的字典源。只需對它進行迭代並寫入即可。

請注意,您可以使代碼更健壯/效率,但最初只是瞭解方法:)

問候,

亞提Sagade

+0

嗨!非常感謝你回覆我的問題!我嘗試了你的建議,但得到了以下錯誤。你知道我做錯了什麼嗎?與如何使用dictreader創建對象有關?回溯(最近通話最後一個): 文件 「merge_bulk_v2.py」,30日線在 RES [關鍵] = d [關鍵] AttributeError的:DictReader實例沒有屬性 '__getitem__' 再次感謝您的幫助:) –

+0

我認爲你會感到困惑:)請參閱DictReader()爲您提供一個像對象的生成器,您可以迭代。我想我的回答太簡單了。我會編輯答案。 –