Какой лучший способ написать Unicode в Python в CSV.DictWriter - PullRequest
0 голосов
/ 07 мая 2018

У меня есть некоторые данные в формате Unicode, которые я пытаюсь записать в CSV-файл.

Я получаю UnicodeEncodeError: кодек 'ascii' не может кодировать u '\ xa0' ...

со следующим кодом

import csv
row_all = [u'\n832\xa0\nANDY\n10-04-1987\xa0\nC\n18-02-2015\xa0\nDR\xa0\n2015\xa0\nJS\xa0\nWR\xa0\nAOM/M/BCT\xa0\n\xa0\n90000000\xa0\n'],[u'\n833\xa0\nB V BOND JAMES\n07-04-1962\xa0\nSC\n21-04-1986\xa0\nP\xa0\n2015\xa0\nJAG\xa0\nSCR\xa0\nDY CCM/FS\xa0\n\xa0\n9701370958\xa0\n'],[u'\n834\xa0\nCATHY \n20-02-1983\xa0\nNR\n02-09-2013\xa0\nD\xa0\nNR\xa0\nJS\xa0\nNR\xa0\nAOM/M/MB\xa0\n\xa0\n9760534923\xa0\n'],[u'\n835\xa0\nDAN CLINTON\n31-07-1985\xa0\nCR\n17-12-2012\xa0\nDR\xa0\nNWR\xa0\nJS\xa0\nNWR\xa0\nAOM/C/AII\xa0\n\xa0\n9001196905\xa0\n']

header_row_list = [ "S_No", "NAME" , "Date_of_birth" , "Zone" , "Date_service_joined" , "Recruitment_method" , "Batch" , "Grade" , "Posted_at" , "Designation" , "Telephone_No" , "Mobile"  ]

lst_dx = []
for i in row_all:
    dx_row = {}
    a1 = i[0].split('\n')
    for j in range(1,12+1):
        dx_row[header_row_list[j-1]] = a1[j]
        #dx_row[header_row_list[j-1]] = a1[j].strip()
    lst_dx += [ dx_row ]

g_n = 'test2.csv'
g = open( g_n , 'wb' )
with g as out_file:
    writer = csv.DictWriter(out_file , fieldnames = header_row_list )
    writer.writeheader()
    for row in lst_dx :
        #writer.writerow([unicode(entry).encode('utf-8') for entry in row])
        writer.writerow(row)
g.close()

Я могу исправить эту ошибку, используя

#dx_row[header_row_list[j-1]] = a1[j].strip()

Но есть ли лучший, более "питонический" способ справиться с этим и улучшить этот код?

1 Ответ

0 голосов
/ 07 мая 2018

Python's open() принимает необязательный аргумент ключевого слова "кодировка". Если вы установите его в UTF-8, он будет делать то, что вы ищете?

...