2013-10-03 3 views
2

Мне сложно понять, как написать список dicts для csv, в котором все мои значения находятся в отдельных столбцах. Вопросы, подобные этому здесь, на SO, мне не помогли. Я использовал DictWriter, но не могу понять, как кормить dict.values ​​() без поля «ошибка x» не в полевых именах ».Напишите список dicts для csv со значениями в отдельных столбцах

.....

dicts = [ 
    {'sku': 'xxxx1', 'model': '1234-56K', 'price': '$xxx.xx', 'name': 'item_name_here', 'stock': 'True'}, 
    {'sku': 'xxxx2', 'model': '1234-56K', 'price': '$xxx.xx', 'name': 'item_name_here', 'stock': 'False'} 
] 

csv_file = open('file.csv','wb') 
fieldnames = ('name', 'price', 'stock', 'model', 'sku') 
csvwriter = csv.DictWriter(csv_file, fieldnames, extrasaction='raise', dialect='excel') 
csvwriter.writeheader() 
csvwriter.writerows(dicts) 
return csv_file 

.....

Это возвращает мои значения в одном столбце, но когда я перебирать значения dicts в списке он просто разбивает все значения (как строки) в 's, t, r, i, n, g,' все еще помещают их в первый столбец.

+1

, которые работали для меня ... есть еще код, который вы не включили ? – mlnyc

+1

Вы используете python3 или python2? Я просто попробовал свой код в python2.7, и он, похоже, работал нормально. – zzzirk

+0

Обратите внимание, что путь столбцов в программе, отличной от Excel, отличается от того, как записывается файл csv. У меня возникли очень неприятные проблемы с использованием LibreOffice's Calc для отображения файла csv, который я написал с помощью Python, но проблема была разделителем, который программа использовала для разбиения данных на столбцы. –

ответ

1

Из документов для csv.DictWriter():

Если словарь передается методу writerow() содержит ключ не найден в имен полей, необязательный параметр extrasaction указывает, какие действия предпринять. Если он установлен на «повышение», значение ValueError увеличивается. Если для него установлено значение «игнорировать», дополнительные значения в словаре игнорируются.

Если это ошибка, которую вы получаете, попробуйте:
csv.DictWriter(csv_file, fieldnames, extrasaction='ignore', dialect='excel')

+0

Наличие 'extrasaction = 'raise'', безусловно, позволит получить поле' 'field x not in fieldnames' ', если один из dicts в списке имеет неизвестное имя поля. – martineau

+0

Подсказки, о которых идет речь, являются обычными диктофонами из проекта соскабливания. Нет никаких дополнительных ключей, которые я не учитывал, но, возможно, некоторые недостающие значения, поэтому я решил использовать это. К сожалению, я не видел никаких изменений, удалив их! –

+0

Я предполагал, что вы получаете ValueError. Может быть, отправит трассировку? – wwii

0

эй я написал это для Python 2.7

Эта функция принимает список словарей и выводит CSV. Она также включает варианты, чтобы установить порядок поля в именах полей, defaultFieldValues, sortField и возможность удаления дубликатов

https://gist.github.com/brendancol/6816393

def write_csv(outputRowDictionaries, outputFile, fieldNames=None, defaultFieldValue='', removeDuplicates=False, sortField=None): 
.... 
+0

Отправьте код своего ответа в свой ответ. – martineau

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