1300, '在 python 中预处理的加载文件期间无效的 utf8 字符串

问题描述

我正在用 Python 加载 xml 数据,拉出我想要的部分,将它们转储到分隔文件中,然后使用加载数据命令将它们读入 MysqL

以下是相关的编码处理点(我认为),以供参考,但我很确定问题是由于 Python 和 MysqL 处理的不正确的 unicode 条目造成的(在代码位之后的更多内容) -- 再说一次,我认为这无关紧要......)

编辑:代码是相关的。这是代码中的一个错误,尽管您可能有兴趣了解 unicode 具有供私人使用的字符(链接如下)

打开xml文件

from lxml import etree
import gzip

        doc = etree.iterparse(gzip.GzipFile(xmlfile),events=('start','end'),encoding="utf-8")

打开要从处理过的 xml 中写入的分隔文件

#Oops,just noticed the quote all here,may not keep that
        self.filename = filename
        self.fp = open(self.filename,'w',encoding='utf8')
        self.writer = csv.writer(self.fp,delimiter='\t',quotechar='"',quoting=csv.QUOTE_ALL,lineterminator='\n')

创建 sql

import pyMysqL

#connection code ... pyMysqL.connect() -> connection.cursor()
    mycursor.execute("CREATE TABLE abstract (" + 
                     "id INT AUTO_INCREMENT PRIMARY KEY," + 
                     "pmid INT NOT NULL," +
                     "element_id INT," +
                     "label varchar(100)," +
                     "category varchar(15)," +
                     "abstract TEXT," + 
                     "FOREIGN KEY (pmid) " +
                     "REFERENCES main (pmid) " +
                     "ON DELETE CASCADE " +
                     ") CHaraCTER SET utf8mb4")

加载表失败的代码

        tsv_path = root_path + name_root + '_' + table_name + '.tsv'
        mycursor.execute(
            "LOAD DATA LOCAL INFILE %s " +
            "INTO TABLE " + table_name + ' '
            "CHaraCTER SET UTF8 " +
            "FIELDS OPTIONALLY ENCLOSED BY '\"' " +
            "TERMINATED BY '\t' " +
            "LI@R_502_6431@ TERMINATED BY '\n'",(tsv_path,))

因此,除了包含此 xml 位的条目外,一切似乎都运行良好: \n􀀔􀀘&#1048601

使用这个很棒的网站 https://unicodelookup.com/#1048600/1,我发现这些 un​​icode 值是“Supplementary Private Use Area-B”的一部分,仅供私人使用 (https://en.wikipedia.org/wiki/Private_Use_Areas)。 Python 似乎并不介意,但 MysqL 介意。

那么,进入我的问题。我正在处理数千万条数据条目。我想要用很少的计算工作来解决这个问题的东西。我不想通过 Python 中的广泛检查来运行每个字符(其中大量意味着计算成本高并且显然是相对的)。我确实想保留条目,只是删除或替换有问题的字符。我不确定这是否是我可以/应该在 Python 或 MysqL 中处理的事情。我如何清理字符串以便 MysqL 不抱怨?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)