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

Php 清理不可解析的csv文件的简单方法是什么,php,python,mysql,csv,Php,Python,Mysql,Csv,csv文件创建正确,但名称和地址字段包含所有可用标点符号。因此,当您尝试导入mysql时,会出现解析错误。例如,名称字段可能看起来像“john”、“doe”“。我无法控制我接收的数据,因此我无法阻止人们输入垃圾数据。从上面的例子可以看出,如果你认为外部引文是封闭的引号,那么它是正确的,但是当然MySQL、Excel、LyBrice等都看到了一个全新的领域。有办法解决这个问题吗?我发现的一些字段在最后一个引号前甚至有一个反斜杠。我不知所措,因为我有1700万张唱片要导入 我有windows操作系统

csv文件创建正确,但名称和地址字段包含所有可用标点符号。因此,当您尝试导入mysql时,会出现解析错误。例如,名称字段可能看起来像“john”、“doe”“。我无法控制我接收的数据,因此我无法阻止人们输入垃圾数据。从上面的例子可以看出,如果你认为外部引文是封闭的引号,那么它是正确的,但是当然MySQL、Excel、LyBrice等都看到了一个全新的领域。有办法解决这个问题吗?我发现的一些字段在最后一个引号前甚至有一个反斜杠。我不知所措,因为我有1700万张唱片要导入


我有windows操作系统和linux,所以无论您想到什么解决方案,请告诉我。

这是一个非常棘手的问题。我不知道有什么真正的方法来解决这个问题,但也许你可以尝试拆分
,“
,清理结果数组(unicorns:)中的项目,然后重新加入行?

MySQL导入有许多参数,包括转义字符。举个例子,我认为引号是通过在前面加引号来转义的。因此,使用esaped通过
'“
导入将起作用。

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

将用户输入的制表符(假设有)转换为空格,然后使用制表符分隔符导出数据


如果无法实现上述操作,则需要实现ESC序列,以确保用户输入的数据不会被视为分隔符。

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


如果你要求别人给你发送JPG,而他们发送的是一个正确的JPG文件,每5个字节省略一个,或者插入一个垃圾字节,你就不会接受,并说“哦,我会为你重建它。”“

首先,找出各种各样的错误。然后用空字符串替换它们。想做就做如果您需要此损坏的数据-只有您可以恢复它

你的标题问:清理不可解析的csv文件的简单方法是什么

如果它是不可解析的,这意味着您无法将它正确地分解为字段。所以你不能清理它

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

如果csv文件创建正确,则可以将其正确拆分为字段。这样你就可以打扫了

只有标点符号?你真幸运。数据库中未验证的文本字段通常包含标签、回车符、换行符,甚至Ctrl-Z

谁说这是“不可比拟的”?基于什么理由?他们对“parsable”的定义是什么

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

你能给我们看一下引起你悲伤的5句话中的相关部分吗?编辑您的问题并将示例格式化为代码,使其更易于阅读。明确上一个/下一个字段的停止/开始位置,例如

...,"john ""," doe",...
顺便说一句,上述内容在任何解释下都不是“正确的”;这不可能是对的,因为引用字符的数量为奇数,并且没有一个是转义的

我对correct的定义是:以下是如何发出一个CSV字段,该字段可以被解析,而不管数据库中有什么内容[caveat:Python CSV module barfs on`\x00']:

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

能否使用其他分隔符重新导出数据?我将拒绝该文件,并让供应商以制表符分隔的形式重新发送。从Python的zen(
导入此
)。“面对模棱两可的局面,拒绝猜测的诱惑。”这主意不错,但我生活在现实世界中,这并不总是可能的