Python 相当于 php FILTER_FLAG_STRIP_HIGH

Python equivalent of 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) 这样的东西会起作用,因为它可以删除所有大于 127 的高 ASCII 值。

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 范围之外的值,因此永远不会删除部分字符。它可能不适用于其他编码。