Удаление символов не-ascii в файле csv

В настоящее время я вставляю данные в свои модели django, используя csv файл. Ниже приведена простая функция сохранения, использующая:

def save(self):
myfile = file.csv
data = csv.reader(myfile, delimiter=',', quotechar='"')
i=0
for row in data:
    if i == 0:
        i = i + 1
        continue    #skipping the header row        

    b=MyModel()
    b.create_from_csv_row(row) # calls a method to save in models

Функция отлично работает с символами ascii. Однако, если в файле csv есть некоторые символы, отличные от ascii, тогда возникает ошибка: UnicodeDecodeError кодек 'ascii' не может декодировать байт 0x93 в позиции 1526: порядковый номер не в диапазоне (128)

Мой вопрос: Как удалить символы, отличные от ascii, перед сохранением моего файла csv, чтобы избежать этой ошибки.

Спасибо заранее.

Ответ 1

Если вы действительно хотите его разбить, попробуйте:

import unicodedata

unicodedata.normalize('NFKD', title).encode('ascii','ignore')

* ПРЕДУПРЕЖДЕНИЕ ЭТО ИЗМЕНИТЬ ВАШИ ДАННЫЕ * Он пытается найти близкое совпадение - т.е. Ć → c

Возможно, лучшим ответом будет использование unicodecsv.

----- РЕДАКТИРОВАТЬ ----- Хорошо, если вам все равно, что данные вообще представлены, попробуйте следующее:

# If row references a unicode string
b.create_from_csv_row(row.encode('ascii', 'ignore'))

Если строка представляет собой коллекцию, а не строку юникода, вам нужно будет перебирать коллекцию на уровне строки, чтобы повторно сериализовать ее.

Ответ 2

Если вы хотите удалить символы, отличные от ascii, из ваших данных, выполните итерацию по вашим данным и сохраните только ascii.

for item in data:
     if ord(item) <= 128: # 1 - 128 is ascii
          [append,write,print,whatever]

Если вы хотите преобразовать символы Unicode в ascii, то ответ выше DivinusVox является точным.