Python эквивалент php FILTER_FLAG_STRIP_HIGH - PullRequest
0 голосов
/ 05 сентября 2018

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

1 Ответ

0 голосов
/ 05 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...