使用OCR解析从pysical表单转换的大量低质量数据的数据集,并使用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范围之外的值,因此从不剥离部分字符。它可能不适用于其他编码。