2016-01-14 2 views
1

У меня есть следующий код:Ошибка записи из DictReader в CSV

def fillBlanks(): 

    # There are duplicate fields in the 'HEADERS' list. A better 'HEADERS' list might be: 
    # HEADERS = ['ST', 'Year', 'PCT_SHORT', 'PCT_V_SHORT'] 
    HEADERS =['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT' ] 
    fileH = open(outputDir+"PCT_SHORT_V_SHORT.csv", 'rb') 
    fileb = open(outputDir+"PCT_SHORT_V_SHOR.csv", 'wb') 
    reader = csv.DictReader(fileH, HEADERS,restval=0) 

    for row in reader: 
     print row 

Он выводит, следующее:

# The `None` key is the result of the data row having more columns than the 'HEADERS' list has fields. 
{None: ['2012', '36', '12'], 'PCT_SHORT': '19', 'Year': '2013', 'PCT_V_SHORT': '17', 'ST': 'OK'} 
{'PCT_SHORT': 0, 'Year': 0, 'PCT_V_SHORT': 0, 'ST': 'AZ'} 
{None: ['2012', '14', '1'], 'PCT_SHORT': '24', 'Year': '2013', 'PCT_V_SHORT': '2', 'ST': 'ID'} 

где 0 заполняет поля, которые ранее пропали без вести.

Как я могу написать каждую строку этого в CSV. Я пытался что-то использовать.

with(fileb) as out: 
    csv_out=csv.writer(out) 

csv_out.writerow(['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT']) 

for row in reader: 
    csvwriters.writerow(row) 

Я получаю ошибку!

sequence expected 

Я также пытался использовать DictWriter, но я не знаком с ним. Я очень новичок в python. есть ли вообще просто написать результирующие строки DictReader в новый CSV?

+0

Каков формат данных, которые вы хотите написать в файл 'csv'? В вашем «HEADER» есть повторяющиеся поля, которые приводят к строкам с ключами «Нет». – gnerkus

+0

Поля являются целыми числами. Возможно, мне нужно изменить дубликаты заголовков? Я могу сделать это очень быстро. –

+0

Я вошел и изменил заголовки, я также добавил заголовки, которые отсутствовали. Я все еще получаю те же ошибки. Моя основная проблема в начале была в том, что у меня были поля, которые отсутствовали. Я хочу заполнить 0. Поэтому я использую DictReader. –

ответ

1

Вы правы относительно объекта DictWriter.

Объект csv.DictWriter может быть использован для записи из dict к csv файла:

with(fileb) as csvfile: 
    csv_out = csv.DictWriter(csvfile, fieldnames=HEADERS) 

    csv_out.writeheader() 

    for row in reader: 
     csv_out.writerow(row) 

Чтобы заменить пустые значения читать от ввода:

# The names of the fields you want to check 
fields = ['ST', 'Year'] 
# The value you want to replace a blank with. In this case, a 0 
marker = 0 

for row in reader: 
    # Check the values, within this row, for each of the fields listed 
    for field_name in fields: 
     field_value = str(row[field_name]).strip() 

     row[field_name] = field_value or marker 

csv_out.writerow(row) 
+0

Я пробовал это, и я получаю еще одну ошибку. Ошибка! sequence item 0: ожидаемая строка, NoneType found –

+0

Какая ошибка вы получили? – gnerkus

+0

Ошибка! sequence item 0: ожидаемая строка, NoneType found –

Смежные вопросы