2014-11-05 37 views
1

我想解析一個csv文件,在Field3中查找沒有任何「/」的單元並將這些單元複製到fieldoutput行的output.csv文件中。在Python中使用帶csv模塊的DictWriter/Reader

我試着下面的代碼,但我得到這個錯誤:

Traceback (most recent call last): 
    File "<string>", line 13, in <module> 
    File "C:\Python27\ArcGIS10.1\Lib\csv.py", line 148, in writerow 
    return self.writer.writerow(self._dict_to_list(rowdict)) 
    File "C:\Python27\ArcGIS10.1\Lib\csv.py", line 144, in _dict_to_list 
    ", ".join(wrong_fields)) 

ValueError: dict contains fields not in fieldnames: Field1, Field2, Field3, Field4 

這裏是我的代碼:

import csv 

f = open("C:\My\Path\file.csv", "r") 
reader = csv.DictReader(f, delimiter=';') 
writer = open("C:\My\Path\output.csv",'wb') 
output = csv.DictWriter(writer, 'fieldoutput', delimiter=';') 

print output 

for row in reader: 
    if '/' not in row['Field3'] : 
     #print row['Field3'] 
     output.writerow(row) 

感謝您的幫助!

回答

1

我不認爲你正確指定第二個DictWriter參數。既然你寫的行是字典,DictWriter需要知道如何排序字段:

The fieldnames parameter is a sequence of keys that identify the order in which values in the dictionary passed to the writerow() method are written to the csvfile.

嘗試從此改變你的DictWriter初始化:

output = csv.DictWriter(writer, 'fieldoutput', delimiter=';') 

這樣:

output = csv.DictWriter(writer, fieldnames=reader.fieldnames, delimiter=';') 
+0

是的它的工作,但不完全如我所料:我得到的所有行復制,而不只是field3)。這解釋了我用新手的角度設置參數的方式。我想我需要完成:output.writerow(row [Field3])或其他東西。 – Kerplouz 2014-11-05 15:18:02