2012-05-15 9 views
0

到目前爲止,我在函數中所做的所有操作都是將所有數據存儲兩次。我正在嘗試編寫一個函數,以便它將一組記錄存儲並以csv格式存儲它們

import csv 
def csvWriter(filename, records): 
    header = [] 
    for i in records: 
    for v in i: 
     header.append(v) 
    test = open(filename,'w') 
    dict_wr = csv.DictWriter(test,header) 
    dict_wr.writerow(dict(zip(header,header))) 
    for i in records: 
    dict_wr.writerow(dict(zip(header,i.values()))) 
    test.close() 
    return '%d records processed.' % len(records) 

文件包含:

a,b,a,b 
1,2,1,2 
3,4,3,4 

我相信我發現這個問題,for循環,我無法創造適當的水箱內。

回答

0

它看起來像你在這個例子中的記錄是2個相同的鍵('a'和'b')的字典。您可以通過從第一字典獲得頭解決這個問題:

for i in records[0]: 
    for v in i:    
     header.append(v) 

但是,如果你的其他記錄有唯一的鍵值,你可能會想,包括他們在標題:

for i in records: 
    for v in i: 
     if v not in header: header.append(v) 

最後,如果您在標題中有重複的值,並且您有DictWriter寫入一行,它將爲每個重複的標題值重複條目。例如,

import csv 
testfile = open("test.csv", "w") 
header = ["a","b", "a","b"]      #duplicate header fields 
writer = csv.DictWriter(testfile, header) 
writer.writerow(dict(zip(header, header))) 
writer.writerow({header[0]:"A", header[1]:"B"}) #notice it writes 4 values to the row 
testfile.close() 
+1

對於CSV,只需導入csv。這就是我使用Python的原因。^_ ^ – zinking

相關問題