Анализ большого набора данных низкого качества, преобразованных из физической формы с использованием OCR и PostgreSQL COPY для вставки файлов .csv в psql. В некоторых записях есть байты ASCII, которые вызывают ошибки при импорте в postgres, поскольку мне нужны данные в UTF-8 varchar (), поскольку я считаю, что использование столбца типа TEXT не приведет к этой ошибке.
DataError: invalid byte sequence for encoding "UTF8": 0xd6 0x53
CONTEXT: COPY table_name, line 112809
Я хочу отфильтровать все эти байты перед записью в CSV-файл.
Я верю что-то вроде PHP FILTER_FLAG_STRIP_HIGH (http://php.net/manual/en/filter.filters.sanitize.php) будет работать, так как он может удалить все высокое значение ASCII> 127.
Есть ли такая функция в Python?
Кодируйте вашу строку в ASCII, игнорируя ошибки, а затем декодируйте ее обратно в строку.
text = "ƒart"text = text.encode("ascii", "ignore").decode()
print(text) # art
Если вы начинаете с байтовой строки в UTF-8, вам просто нужно ее декодировать:
bites = "ƒart".encode("utf8")
text = bites.decode("ascii", "ignore")
print(text) # art
Это работает конкретно с UTF-8, потому что многобайтовые символы всегда используют значения вне диапазона ASCII, поэтому частичные символы никогда не удаляются. Это может не очень хорошо работать с другими кодировками.
Других решений пока нет …