Python 2 csv.DictWriter () Unicode Encode обработка исключений

1

Мой код ниже:

with open('C:\\Users\\...\\Documents\\RP_test_8.txt', 'w') as f:
    cf = csv.DictWriter(f, column_headers, extrasaction='ignore') 
    cf.writeheader()
    cf.writerows(r.data for r in records)

дает мне исключение кодировки unicode:

UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-141-410d45c40cce> in <module>()
      2     cf = csv.DictWriter(f, column_headers, extrasaction='ignore')
      3     cf.writeheader()
----> 4     cf.writerows(r.data for r in records)

C:\Users\...\AppData\Local\Continuum\anaconda2\lib\csv.pyc in writerows(self, rowdicts)
    156         for rowdict in rowdicts:
    157             rows.append(self._dict_to_list(rowdict))
--> 158         return self.writer.writerows(rows)
    159 
    160 # Guard Sniffer type checking against builds that exclude complex()

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 30: ordinal not in range(128)

Каков наилучший способ справиться с этим?

Теги:
python-2.7
export-to-csv
unicode
ordereddict

1 ответ

0

Вы можете кодировать каждое значение в словаре следующим образом, а затем отправить окончательный список словарей на writerows функцию. Вы также можете закодировать ключ, если это необходимо.

import csv
cf = csv.DictWriter(f, column_headers, extrasaction='ignore')
cf.writeheader()
final_dict_list = []
for r in records:
    for d in r.data:
        final_dict_list.append({k:v.encode('utf8') for k,v in d.items()})
cf.writerows(final_dict_list)
  • 0
    Если это работает, пожалуйста, примите ответ.
  • 0
    Спасибо за подробный ответ; но я получаю AttributeError: у объекта 'unicode' нет атрибута 'items' в строке, которая начинается с final_dict_list.append (). Позже я нашел обходной путь; это добавление импорта unicodecsv.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню