如何清理凌乱的 CSV 文件
打开 CSV Cleaner 并加载带有自动检测分隔符的文件。首先检查行数和列数:如果列数为 1,则分隔符错误,将其设置为分号或制表符通常可以修复整个文件。
然后,在接触数据之前,先处理解析器警告,这些警告会指定特定的行号。清理,然后导出为 CSV 或 JSON。一切都在浏览器中的工作线程中运行;这些行永远不会上传。
为什么出口到货时破损
CSV 是一系列约定而不是一种格式。两个应用程序都可以声明 CSV 支持,但在分隔符、引用样式、行结束符和字符编码方面存在分歧。
分隔符是最常见的惊喜。在使用逗号作为小数点分隔符的国家/地区销售的软件通常会导出分号分隔的文件,因为逗号已被占用。这些文件仍然以 .csv 结尾,并且假设逗号的工具将每一行折叠成一列。
编码是第二个。 UTF-8 文件通常以不可见的三字节字节顺序标记开头。 Windows 上的 Excel 使用它来识别 UTF-8;许多其他工具并不期望它,因此它会粘在第一个标头名称上,并且名为 id 的列默默地成为任何查找都不会匹配的列。
通过三个数字进行诊断
自动检测使用每个候选分隔符解析样本,并选择产生最一致的矩形结果的样本,这就是为什么它不会被分号分隔文件的引用字段内的逗号所欺骗。大多数时候这都是对的;预览会告诉您何时不是。
- 列数。如果为1,则分隔符错误。尝试使用分号,然后使用制表符。
- 行数。如果它远高于预期,则该文件可能包含上游已损坏的引用换行符。
- 警告计数。每个警告都会命名一个行号,按照文本编辑器的计数方式进行计数,以便您可以查看。
阅读警告
参差不齐的行意味着该行的单元格数量与标题不同。不会丢弃任何内容来整理网格:短行用空白填充,长行保留其额外值。默默地删除某人的数据以使表格看起来是矩形是清理工具可以做的最糟糕的事情,所以它没有这样做。
未闭合的引号意味着双引号被打开并且从未闭合,因此它后面的所有内容都被读取为一个巨大的字段。这几乎总是源代码中真正的损坏,值得修复文件的生成位置,而不是在下游修补。
该工具会报告这些问题而不是修复它们,因为这两种情况都有几种可能的正确修复方法,并且只有您知道哪一种适用。
按正确顺序清洁
默认情况下,配方注射安全导出处于启用状态,并且是具有真正安全效果的一种选项。以 =、+、- 或 @ 开头的单元格被电子表格应用程序视为公式,因此当有人打开您的文件时,来自不受信任来源的值可以执行。安全导出在这些单元格前加上撇号,这会阻止它们计算 - 包括您打算计算的任何内容,这是缓解措施固有的而不是错误。
- 首先修剪空白。仅尾部空格不同的两行在修剪之前不会重复。
- 其次删除重复的行。保留第一次出现的情况,因此生存顺序不变。
- 重命名标题并选择要导出的列。
- 如果需要的话排序。数字列被检测并按数字排序,因此 9 排在 10 之前。
- 下载前检查导出选项,尤其是配方注入设置。
选择导出编码
如果文件的目的地是 Windows 上的 Excel,则将 UTF-8 byte-order 标记打开,Windows 使用它来检测编码;如果没有它,重音字符和非拉丁脚本可以在双击时显示为 mojibake。
如果文件提供脚本、数据库导入或其他程序,请将其保留为关闭,因为一些严格的解析器将标记视为数据。
工作示例:作为一列打开的 12,000 行导出
来自欧洲 CRM 的客户导出在编辑器中打开为 12,000 行和一列。标题行显示姓名;电子邮件;国家/地区;注册日期。
- 加载文件。自动检测报告4列;如果没有,请手动将分隔符设置为分号。
- 阅读警告:假设 418、2,905 和 7,110 处有 3 个参差不齐的行。
- 看看那三行。它们在公司名称中包含一个未转义的分号 - 保留了额外的单元格,因此不会丢失任何内容。
- 修剪空白,然后删除重复项。
- 导出为 CSV,以逗号作为分隔符,并打上字节顺序标记,因为该文件将发送给使用 Excel 的同事。
结果: 一个逗号分隔的 UTF-8 文件,带有字节顺序标记、四列和重复行。三个有问题的行仍然存在,其额外的单元格完好无损,标记为供您在源头修复,而不是删除以使表格整洁。
打开工具
在您的设备上解析 Web Worker ,保留它找到的每个单元格,并报告它不会猜测的问题。
这不包括什么
- 整个文件保存在您的设备内存中。上限为 50 MB,手机比笔记本电脑更容易陷入困境。
- 尽管每行都已清理并导出,但预览中仅显示前 100 行。
- 编码检测仅限于 UTF-8 byte 顺序标记。保存为 Windows-1252 或 Shift-JIS 的文件被读取为 UTF-8 并且可能显示替换字符;从源应用程序将其重新导出为 UTF-8。
- 仅写入 UTF-8。不生成旧编码。
- 不支持多工作表,因为 CSV 没有工作表的概念。
- 报告其引用已损坏的文件,但不进行修复。
- 撤消仅限于最近 20 次操作。