Python эквивалент php FILTER_FLAG_STRIP_HIGH

Анализ большого набора данных низкого качества, преобразованных из физической формы с использованием 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?

0

Решение

Кодируйте вашу строку в 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, поэтому частичные символы никогда не удаляются. Это может не очень хорошо работать с другими кодировками.

1

Другие решения

Других решений пока нет …