什么是清理不可解析的csv文件的简单方法

时间:2011-05-30 03:54:27

标签: php python mysql csv

csv文件已正确创建,但名称和地址字段包含可用的每个标点符号。因此,当您尝试导入到mysql时,您会收到解析错误。例如,名称字段可能看起来像这样,“john”“,”doe“。我无法控制我收到的数据,所以我无法阻止人们输入垃圾数据。从上面的例子可以看出,如果你认为外部引号是封闭的引号然后它是正确的但当然mysql,excel,libreoffice等看到一个全新的领域。有没有办法解决这个问题?我找到的一些字段甚至在之前有一个反斜杠最后一个封闭的报价。我很茫然,因为我有1700万条记录要导入。

我有windows os和linux所以无论你能想到什么解决方案,请告诉我。

6 个答案:

答案 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)

首先 - 发现各种错误。然后用空字符串替换它们。去做就对了!如果您需要此损坏的数据 - 只有您可以恢复它。