csv文件已正确创建,但名称和地址字段包含可用的每个标点符号。因此,当您尝试导入到mysql时,您会收到解析错误。例如,名称字段可能看起来像这样,“john”“,”doe“。我无法控制我收到的数据,所以我无法阻止人们输入垃圾数据。从上面的例子可以看出,如果你认为外部引号是封闭的引号然后它是正确的但当然mysql,excel,libreoffice等看到一个全新的领域。有没有办法解决这个问题?我找到的一些字段甚至在之前有一个反斜杠最后一个封闭的报价。我很茫然,因为我有1700万条记录要导入。
我有windows os和linux所以无论你能想到什么解决方案,请告诉我。
答案 0 :(得分:8)
这可能不是一个有用的答案,但有人需要说出来。 你不应该这样做。 CSV是具有预期数据编码的文件格式。如果有人向您提供CSV文件,那么它应该被分隔并正确转义,否则它是一个损坏的文件,你应该拒绝它。使供应商从导出的任何数据存储中正确地重新导出文件。
如果你要求有人向你发送JPG并且他们发送的是一个正确的JPG文件,其中每个第5个字节被省略或插入垃圾字节,你就不会接受并说“哦,生病重建它”。
答案 1 :(得分:1)
您没有说是否可以控制CSV文件的创建。我假设你这样做,好像没有,CVS文件损坏,没有人为干预就无法恢复,或者一些非常聪明的算法来“猜测”正确的分隔符与用户输入的分隔符。
将用户输入的标签(假设有一些标签)转换为空格,然后使用TABS分隔符导出数据。
如果无法实现上述目标,则需要实施ESC序列以确保用户输入的数据不被视为分隔符。
答案 2 :(得分:1)
您的标题要求:清理不可解析的csv文件的简便方法
如果它不可解析,则意味着您无法将其正确分解为字段。所以你不能清理它。
您的第一句话说明: csv文件已正确创建,但名称和地址字段包含可用的每一个标点符号。
如果正确创建了csv文件,那么可以正确地将其拆分为字段。所以你可以清理它。
只有标点符号?你很幸运。数据库中未经验证的文本字段通常包含诸如 tab ,回车符,换行符甚至Ctrl-Z之类的恶意内容。
谁说这是“不可解决的”?基于什么理由?他们对“可解析”的定义是什么?
谁说这是“正确创造”?基于什么理由?他们对“正确”的定义是什么?
你能不能告诉我们5个左右的相关部分让你感到悲伤?编辑您的问题并将示例格式化为代码,以使其更易于阅读。明确上一个/下一个字段停止/开始的位置,例如
...,"john ""," doe",...
顺便说一句,在任何解释下,上述内容并非“正确”;它不可能是正确的,带有引号字符的ODD数,其中没有一个被转义。
我对正确的定义:以下是无论数据库中的内容如何发出可以解析的CSV字段[警告:'\ x00'上的Python csv模块barf]:
if '"' in field:
output = '"' + field.replace('"', '""') + '"'
elif any of comma, line feed, carriage return in field: # pseudocode
output = '"' + field + '"'
else:
output = field
答案 3 :(得分:0)
这是一个非常棘手的问题。我不知道有什么方法可以解决它,但也许你可以尝试拆分","
,清理结果数组中的项目(unicorns :))然后重新加入行?
答案 4 :(得分:0)
MySQL导入有许多参数,包括转义字符。举个例子,我认为报价是通过在前面加上报价来逃避的。因此,'"'
的导入将起作用。
答案 5 :(得分:0)
首先 - 发现各种错误。然后用空字符串替换它们。去做就对了!如果您需要此损坏的数据 - 只有您可以恢复它。