数据和电子表格 · CSV 清理器
CSV 分隔符检测的工作原理:逗号、分号、制表符和竖线
· 工作原理
数据集 数据清理 文件格式
CSV 文件从不说明哪个字符分隔其字段,因此软件必须猜测。这篇文章解释了分隔符嗅探的工作原理,为什么它在棘手的文件上失败,以及如何使分隔符明确。
作为一长列打开的文件 - 为什么分隔符没有存储在 CSV 中的任何位置
数据分析师打开 .csv 导出,并在每一行上看到一个长字段。扩展名不会告诉读者使用了哪个分隔符,并且文件通常不包含分隔符声明。假设逗号的应用程序会将分号分隔的标题(例如名称;城市;注释)作为单列读取。在更改值之前,询问哪个字符实际划分字段以及导入器是否有办法覆盖其猜测。
支持的四种候选字符:逗号、分号、制表符和竖线
ToolAcre 将逗号、分号、制表符和竖线视为候选。当逗号已用作小数点分隔符、制表符避免简单导出中的标点符号冲突以及管道有时分隔日志或数据库转储时,分号很常见。空格不属于该工具的自动选择:名称和自由文本单元格通常包含空格。不要仅仅因为候选文本中频繁出现就添加它;分隔符必须将行划分为一致的字段。
嗅探的工作原理——计算每行的候选字符数,并优先选择能够提供跨行一致字段计数的字符
该实现剥离了前导 UTF-8 byte-顺序标记,并解析每个候选最多十行的样本。它记录这些行的宽度并拒绝任何永远不会产生至少两列的候选者。当候选者在行中一致地生成更多列时,得分更高;宽度不一致会在分数中扣两次分。至关重要的是,解析会观察带引号的字段,因此带引号的地址内的逗号不算作字段边界。这与简单的字符计数不同,这就是为什么凌乱的地址列不需要失败检测。
嗅探失败的地方 - 充满逗号的自由文本列、单列文件和隐藏真正分隔符的带引号字段
没有任何猜测是绝对正确的。一个非常短的文件几乎没有证据,真正的一列 CSV 没有候选者可以分成两部分,并且格式错误的引用可能会使多个候选者解析看起来不完整。当引用被破坏时,填充分隔符的自由文本列可能会与真正的分隔符竞争。跨行的混合分隔符不是一种干净的 CSV 方言。该工具报告解析警告并公开手动分隔符选择;了解上游导出约定的用户可以覆盖推断的选择,而不是假装启发式是规范。
工作示例 - 分号分隔的导出,地址内有逗号,显示了为什么天真的计数选择了错误的字符
尝试使用标题 name;city;note 和一行 Ada;Paris;“10 点在车站附近开会”的小示例。计算原始逗号可能会错误地偏向逗号,因为注释包含标点符号,尤其是在几个这样的行上。分号解析器在两行上返回三个字段;逗号解析器不提供相同的矩形结构。在修剪、重复数据删除或导出之前,确认预览将名称、城市和注释显示为单独的列。如果一个源行有未闭合的引用,请检查该行,而不是默默地丢弃它以提高分数。
选择输出分隔符 - 将分隔符与接下来要读取文件的程序和区域设置相匹配
输入分隔符和输出分隔符是不同的决定。您可以导入欧洲分号文件,但为需要逗号的程序导出 RFC 样式的逗号分隔文本。正确的编写器会引用包含输出分隔符、嵌入引号或换行符的字段。下载前确定您的收件人是否需要 UTF-8 BOM;一些电子表格应用程序使用编码来识别编码,而许多解析器希望文件没有编码。检查目标程序中下载的标头,而不仅仅是浏览器预览。
这不包括什么 - 在行之间混合分隔符的文件,以及根本不使用分隔符的固定宽度导出
检测无法修复中途更改分隔符的文件,也无法推断固定宽度导出中不存在分隔符的列。它不知道引用的逗号是否是街道地址的一部分或数据输入错误:它遵循语法,而不是含义。 CSV Cleaner 将显示参差不齐的行并保留其值,而不是猜测如何删除客户的数据。在执行不可逆的清理步骤之前,使用其预览和警告来诊断源系统问题。
明确分隔符而不是希望 — ToolAcre CSV Cleaner 的分隔符修复如何生成一个具有一致分隔符的文件
分隔符猜测是对几行的基于证据的解析,而不是写入 CSV 文件内的承诺。 CSV Cleaner 在浏览器本地实现它,让您选择不同的分隔符并编写一种一致的输出方言。如果导入向导下周猜测不同,请在文件旁边记录输出约定,以便下一个读者不必重新发现它。