2011-05-30 33 views
2

正确创建了csv文件,但名称和地址字段包含可用的每一个标点符号。所以当你尝试导入到mysql时,你会得到解析错误。例如,name字段可能看起来像这样,“john”,“doe”。我无法控制我收到的数据,所以我无法阻止人们输入垃圾数据。从上面的例子可以看出,如果你认为外部引号是封闭的引号,那么它是正确的,但当然mysql,excel,libreoffice等等看到一个全新的领域。有没有办法解决这个问题?我发现一些领域甚至有一个反斜杠最后封闭的报价。我不知所措,因为我有1700万张专辑导入。什么是清理不可解析的csv文件的简单方法

我有Windows OS和Linux所以无论解决方案,你能想到的,请让我知道。

+0

你能使用其他分隔符重新导出数据? – 2011-05-30 04:03:43

+0

我要拒绝该文件,并让供应商重新发送为制表符分隔。 – cmptrwhz 2011-05-30 04:26:38

+0

从Python的禅宗('进口这个')。 “面对歧义,拒绝猜测的诱惑。” – 2011-05-30 04:45:38

回答

0

这是一个非常棘手的问题。我不知道有什么真正的方法可以解决它,但也许你可以尝试拆分",",清理t他在结果数组中输入(独角兽:),然后重新加入该行?

0

MySQL导入有许多参数,包括转义字符。考虑到这个例子,我认为通过在前面加上引号可以避免报价。所以一个'"'隐含的进口会起作用。

1

你不说你是否可以控制CSV文件的创建。我假设你这样做,如果没有,CVS文件已损坏,如果没有人为干预或者一些非常聪明的算法来“猜测”正确的分隔符与用户输入的分隔符,就无法恢复。

将用户输入的选项卡(假设有一些)转换为空格,然后使用TABS分隔符导出数据。

如果上述不可行,则需要实施ESC顺序以确保用户输入的数据不被视为分隔符。

8

这可能不是一个可用的答案,但有人需要说出来。 你不应该这样做。 CSV是具有预期数据编码的文件格式。如果有人向您提供CSV文件,则应该对其进行分隔并正确转义,否则其文件已损坏,您应拒绝该文件。使供应商可以从导出的任何数据存储中正确地重新导出文件。

如果您要求某人向您发送JPG,并且他们会发送什么是正确的JPG文件,并且每填写一个第5个字节或插入垃圾字节,您都不会接受并说“哦,生病了会为您重新构建”。

+1

不错的想法,但我生活在现实世界中,并不总是可能 – 2013-09-11 07:55:01

0

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

1

你的标题问:什么是清洁的不可分析的CSV文件

如果它是不可解析一个简单的方法,这意味着你不能正确地把它分解成多个领域。所以你不能清理它。

您的第一句话是:csv文件已正确创建,但名称和地址字段包含可用的每一个标点符号。

如果csv文件创建正确,那么你可以正确地将其分割成字段。所以你可以清理它。

只有标点符号?你很幸运。数据库中未经验证的文本字段通常包含像选项卡,回车,换行符,甚至Ctrl-Z之类的废话。

谁说这是“不可分割的”?基于什么理由?他们对“可解析”的定义是什么?

谁说这是“正确创建”?基于什么理由?他们对“正确”的定义是什么?

请问您可能向我们展示引起您悲伤的说5行左右的相关部分?编辑您的问题并将示例格式化为代码,以使其更易于阅读。显而易见,上一个/下一个字段停止/开始的位置

...,"john ""," doe",... 

顺便说一下,上述内容在任何解释下都不是“正确”的;它不可能是正确的,具有奇数字符的引号字符都不会被转义。

我的正确定义:这里是如何发出CSV字段,可不管是在数据库[警告:在'\ x00' 的Python的CSV模块barfs]:解析

if '"' in field: 
    output = '"' + field.replace('"', '""') + '"' 
elif any of comma, line feed, carriage return in field: # pseudocode 
    output = '"' + field + '"' 
else: 
    output = field 
相关问题