Мой код ниже:
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)
Каков наилучший способ справиться с этим?
Вы можете кодировать каждое значение в словаре следующим образом, а затем отправить окончательный список словарей на 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)