Python で CSV にデータを書き込もうとすると、次のエラーが表示されます。
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 150, in writerows
UnicodeEncodeError: 'ascii' codec can't encode character u'\xd3' in position 0: ordinal not in range(128)
CSVに書き込もうとしている辞書の例を次に示します。
{'Field1': 'Blah \xc3\x93 D\xc3\xa1blah', 'Field2': u'\xd3', 'Field3': u'Blah', 'Field4': u'D\xe1blah'}
Python で Unicode を CSV に書き込めないことはわかっていますが、何を変換するか、どのように変換するかがわかりません。
編集:これは私が試したことです。 dictList
別の CSV から取得した辞書のリストです。
WANTED_HEADERS = ['First Name',
'Last Name',
'Date',
'ID']
def utf8ify(d):
return dict((str(k).encode('utf-8'), str(v).encode('utf-8')) for k, v in d.iteritems())
def ListToCSVWithHeaders(data_list, output_file_name, headers):
output_file = open(output_file_name, 'w')
header_row = {}
to_append = []
for entry in data_list:
to_append.append(utf8ify(entry))
for key in entry.keys():
if key not in headers:
headers.append(key)
print 'KEY APPENDED: ' + key
for header in headers:
header_row[header] = header
data = [header_row]
data.extend(to_append)
data_writer = csv.DictWriter(output_file, headers)
data_writer.writerows(data)
print str(len(data)) + ' rows written'
ListToCSVWithHeaders(dictList, 'output.csv', WANTED_HEADERS)
これは、実行時に受け取るエラーです。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)