![在没有其他数据源的情况下删除 CSV 中的多余逗号](https://linux22.com/image/1241657/%E5%9C%A8%E6%B2%A1%E6%9C%89%E5%85%B6%E4%BB%96%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%88%A0%E9%99%A4%20CSV%20%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%BD%99%E9%80%97%E5%8F%B7.png)
我们有一个包含客户地址的大型数据库,该数据库已从 SQL 数据库导出到 CSV。如果公司名称中包含逗号,则(可以预见)整个数据库会变得混乱。
不幸的是,这种情况(以及第二行地址中的逗号)太多了,整个 CSV(约 10 万行)都乱七八糟。显而易见的解决办法是再次以不同的、不依赖逗号的格式导出数据,但目前几乎无法访问该 SQL 数据库……我尝试了一些工具,并集思广益,想办法解决这个问题,但我认为问问也无妨。谢谢!
答案1
根据我的经验,尝试从当前数据中修复此问题将花费您想要的任何时间,并且无法保证您的结果与初始数据相同。等到数据库再次可用可能会更容易。
基本问题是,转换为简单的 CSV 格式不是双射的 - 根本就没有从 CSV 文件直接映射回原始数据。您可以尝试使用一些启发式方法来减少这个问题,但这需要一定数量的脚本或编程。它还取决于您可用的平台和工具,以及 - 最后也是最重要的 - 您的技能。
您可能有一些记录,其中没有字段值包含嵌入逗号。首先提取这些记录,即使数量很少,这也是一个起点。
您可能会找到一种启发式方法,通过字段分隔逗号来区分至少一些“嵌入”的逗号。
您可以尝试识别特征列的数据值,例如电子邮件地址、电话号码等。从那里开始,您可以缩小需要更仔细检查的列的数量。
以此方式逐步进行应该允许您将数据转换为更适合的格式,例如使用制表符作为字段分隔符。
您还应该考虑在第一步中仅提取一些列和唯一的键值(记录号?),然后再匹配不同的部分。
写下、记录、保留你正在做的事情。否则,你只会让事情变得更糟而不是更好。
祝你好运!
答案2
作为一名程序员,我的方法是创建一个小应用程序,逐行解析文件并检查行中的逗号数量(我认为你应该知道正确的行有多少个逗号)
如果它与预期数字匹配,则输出到新文件,用制表符代替逗号。
如果不匹配,则显示该行,并选择一个选项以排除哪些逗号应该转换为制表符,并根据该选择进行输出。
这样您就会得到一个制表符分隔的文件,其中某些地址字段以逗号分隔。
答案3
第一个选择是等到您再次可以访问数据库。
如果这不切实际,Excel 就是你的 CSV 朋友(如果你不是程序员)
以下是我使用过的 Excel 方法:
将 CSV 导入 Excel,以便文件中具有正确逗号数量的行最终出现在 Excel 行中正确数量的单元格中。例如,假设您有七个字段,其中七个逗号的位置正确,Excel 将使用正确的 CSV 导入设置将它们解析为七个单元格。
现在打开 Excel 工作表,转到顶行,并转到正确行最后一个单元格右侧的一个单元格。例如,如果您有 7 个字段,则这些字段将从“A”跨越到“G”。转到“H”列
在 Mac 上,按Command+ 向下箭头;在 PC 上,Ctr按 + 向下箭头。这将跳过所有空白并停在第一个有内容的单元格。手动修复行并转到下一行。
如果任何行中的字段(逗号)太少,您可以通过转到正确单元格的最后一个单元格左侧的第一个单元格来找到这些字段。例如,如果您有跨越 A - G 的正确行,请转到 F 列并重复步骤 3。
对于 100,000 行数据,只有当大部分行都正确时才可行,但您会惊讶地发现,通过这种方式修复文件的速度非常快。现在,您可以使用 Excel 将文件保存为正确的 CSV 格式。
祝你好運...
答案4
我知道这可能听起来有点简单,但它救了我一命。如果是姓名,则可能是逗号后跟空格。但导出的 CSV 不会在列之间的逗号后留空格。因此,如果您查找并替换“,”它可能会删除不需要的逗号。