2012-08-10 86 views
2

使用Internet上的一些幫助,我構建了一個通用函數,它從csv文件中提取特定列並將其讀取到輸入指定的字典中。爲什麼DictWriter不能在我的代碼中工作?

import csv 
def dict_filter(it, keys): 
    for d in it: 
     yield dict((k, d[k]) for k in keys) 

然後我後來把這種方法用DictReaderDictWriter寫這些列到另一個CSV文件:

fieldnames = ["_STATE", "HEIGHT", "WEIGHT", "_BMI", "AGE", "CTYCODE", "IYEAR"] 
source = open("data88.csv", 'r') 
reader = csv.DictReader(source) 
result = open("aggregate_data.csv", 'w') 
writer = csv.DictWriter(result, fieldnames, extrasaction='ignore') 
for d in dict_filter(reader, fieldnames): 
    if d['_STATE'] == "17" : 
     writer.writerow(str(d)) 

這是我在終端得到的錯誤:

AttributeError: 'str' object has no attribute 'get' 

在的TextWrangler :

Traceback (most recent call last): writer.writerow(str(d)) 

我看遍了所有的互聯網,我沒有找到任何解脫。爲什麼writerow不適用於我的DictWriter實例?

+0

這是整個錯誤?這是令人驚訝的。之後沒有一條線? – 2012-08-10 05:27:23

+0

是的,我在TextWrangler中運行它,並且之後沒有任何行。 – SVenkatesh 2012-08-10 05:31:09

+0

編輯解釋了很多。嘗試將該行更改爲'writer.writerow(d)'。 – 2012-08-10 05:34:05

回答

1

更改線路

writer.writerow(str(d)) 

writer.writerow(d) 
相關問題