У меня есть словарь, как это:Каков самый простой способ написать словарь с кодировкой UTF-8 в .csv в Python 2.7?
for i in wordlist:
#some searching and parsing that produces one-line sentences, str1 and str2
list1.append(str1)
list2.append(str2)
zipall = zip(list1, list2)
mydict = {i: zipall}
где «я» является строкой. Все кириллица. Когда я печатаю его, я получаю коды (\ u0440 \ u0435 и т. Д.).
Мне нужно сохранить словарь в файл csv по строке на каждой итерации, чтобы i, str1 и str2 находились в одной и той же строке и в отдельных столбцах, чтобы позже их читать. Когда я пытаюсь
with open('C:\...result.csv','wb') as f: #I will need the 'a' mode?
writer = csv.writer(f)
for key, value in mydict.items():
writer.writerow([key, value])
и подобные методы, я получаю это:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Другой материал, который я пробовал:
f = open('C:\...results.csv','wb')
w = csv.DictWriter(f,sorted(mydict.keys()))
w.writeheader() #throws error in this line
w.writerow({k:v.encode('utf8') for k,v in mydict.items()})
f.close()
(от this question), и рассол, на основе this question , Я пытался до iterate over the dictionary, но это значение является кортежем, и я не могу его кодировать. Есть ответы, которые включают functions, а что нет (попробовал работать с кортежами), но я не понимаю этих методов (и они не работали).
Есть ли (простой) способ?
EDIT - КАРУСЕЛЬ РЕШЕНИЕ
Поскольку я не очень нужен выход, чтобы быть в формате CSV, а данные впоследствии будут рассмотрены в Excel, я применил the xlwt package. Получил идею от here.
Пакет позволяет мне записывать в ячейки электронной таблицы Excel с указанной кодировкой (см. this). Мне больше не нужны словари и списки кортежей. Я просто работаю с строками результата.
Если есть способ конвертировать xls в csv из Python, я не знаю об этом.
В этой строке 'w.writerow ({k: v.encode ('utf8') для k, v в mydict.items()})', 'v' является кортежем, поэтому он имеет no 'encode' метод. Попробуйте подумать в терминах элементов кортежа в следующих строках: '{k: tuple ([vv.encode ('utf8') для vv в v]) для k, v в mydict.items()}' –