CSV 文件清理指南:按顺序排查的常见问题
清理杂乱的 CSV 导出文件,要分层处理:先处理字符,再整理结构,最后确认每一列的含义。CSV 就是纯文本,所以大多数问题都来自错误的字符、多余的行或分隔符,或者程序读取数值的方式与你的理解不一样。先处理字符。一个隐藏的空格可能让日期无法被识别为日期,之后的修复也会莫名其妙地失败。
CSV 清理工具CSV 有空行和重复行,格式混乱免费使用看起来正常,实际有问题的字符
多余的空格。 单元格开头或结尾的空格,或者值中间的两个空格,会让 "Berlin " 和 "Berlin" 在查找、筛选或关联时被当成两个不同的值。
不可见字符。 有些字符在屏幕上不占位置:
- 不间断空格(U+00A0)看起来和普通空格一样,但它是另一个字符。网页用它把词语连在一起,避免断行。
- 零宽空格(U+200B)完全没有宽度。
- 字节顺序标记(U+FEFF)可能位于文件最开头,排在第一个表头之前。这时列名看起来是 "id",实际上是 "id",所以查找 "id" 会失败。
删除不可见字符 会在做任何修改之前先显示它找到的字符。
乱码。 应该是 "é" 的地方出现 "é",这是一种编码问题,叫作乱码(mojibake)。文件以 UTF-8 保存,é 占两个字节,却按 Windows-1252 读取,这两个字节就变成了两个毫不相干的字母。撇号 "’" 也会以同样的方式变成 "’"。解决办法是按 UTF-8 读取文件,或者在源系统中选择 UTF-8 重新导出。修复已经保存错误的文本很不可靠,所以请保留原始文件,在副本上操作。
结构:标题行、空行和重复项
报表通常会在真正的表头上方放一个标题、一个日期和一个空行。删除表头行之上的所有内容,让第一行就是列名。每一列都需要一个名称,且名称不能为空。
每一行的字段数应该相同。未加引号的值中如果有多余的逗号,就会多出一个字段,它之后的每个值都会右移一列。逐行统计字段数,字段数不同的行就是有问题的行。
重复项分两种。各列完全相同的行,通常是因为导出或粘贴了两次,可以放心删除。共享同一个键、但其他列不同的行,可能是更新记录。删错了可能会删掉最新版本,所以先检查一下。
日期:03/04/2026 可能是两个不同的日子
03/04/2026 在一个国家是 4 月 3 日,在另一个国家是 3 月 4 日,文本本身无法判断。查看同一列中的其他日期。如果有任何一个日期的第一个数字大于 12,这一列就是日在前;如果有任何一个日期的第二个数字大于 12,这一列就是月在前。如果每个值的两个数字都不超过 12,文件本身无法说明,应向源系统确认。数据类型检测 会把这样的列标记为有歧义,而不是猜测。
确定顺序后,把所有日期转换为 ISO 8601 格式,即年-月-日的形式,例如 2026-04-03。这种格式没有歧义,而且作为文本也能正确排序。混合格式要逐个转换,因为同一列中同时存在两种格式时,大多数程序都会读错。
被存成文本的数字
当数字带有货币符号、百分号,或内部有空格时,它就会被存成文本,例如 "€ 12"、"45%" 或中间带不间断空格的 "1 234"。像 "1,234.50" 这样带千位分隔符的数字,也常常会被程序当作文本。电子表格中,文本数字会左对齐,求和时会被跳过。
小数点和逗号容易混淆。在 "1.234,50" 中,逗号是小数点,句点用来分隔千位;在 "1,234.50" 中则正好相反。因此 "1,234" 在一个导出文件中可能是 1234,在另一个中可能是 1.234。转换之前先确定源数据的区域格式,然后去掉千位分隔符,并把小数逗号换成小数点。
前导零丢失
邮编、产品编码和账号常常以零开头。CSV 在电子表格中打开时,"01234" 会被读成数字 1234,前导零就没了。保存文件后,这种损失会被保留,所以源系统才是唯一可靠的副本。
标识符即使看起来像数字,也应当作文本处理,因为你不会对它做运算。清理 CSV 时,对这类列关闭数字转换,并从源系统重新打开文件,而不是使用电子表格保存过的副本。之后再检测每一列的数据类型,确认邮编列没有悄悄变回数字。Excel 打开 CSV 时也可能改写数值,所以请在纯文本视图中检查结果。
先检查类型,再做统计分析
清理完成后,检查每一列的类型。价格列中只要有一个 "N/A",整列就会变成文本,它的合计也会出错。数据类型检测 会为每一列给出类型和置信度,并列出不符合该类型的单元格。
然后对各列进行统计分析。CSV 列统计分析 会显示每一列中的空缺和异常值。异常值可能是真实数据,也可能是错误,例如某个价格比其他价格大一千倍,这通常是小数点或分隔符放错位置造成的。
特殊情况
- 引号内的换行。 带引号的值中可能包含换行。如果工具按行拆分文件,这一行就会被拆成两行,所以请使用能识别带引号字段的读取工具。
- 分号分隔的文件。 许多欧洲电子表格在保存 CSV 时使用分号,因为在他们的区域格式中逗号是小数点。读取列之前,先检查分隔符。
- 保留原文件。 将清理后的结果写入新文件,并保留原始导出文件。
按顺序的检查清单
- 保留一份原始导出文件的副本。
- 删除多余的空格和不可见字符。如果可以,在源头修复乱码。
- 删除标题行,检查表头名称,并确认每一行的字段数相同。
- 找出重复项,并决定保留哪个版本。
- 将日期转换为年-月-日,去掉分隔符,并把标识符保存为文本。
- 检查每一列的类型,然后对其进行空缺和异常值统计分析。
快速解答
为什么值看起来一样,查找却失败?
通常是某个单元格中含有空格、不间断空格或字节顺序标记。删除不可见字符后再试一次。
为什么我的日期变成了别的内容?
程序可能以错误的顺序读取了日在前或月在前的日期,也可能把文本转换成了它自己的日期格式。请先自己把日期转换为年-月-日。
由 AI 辅助翻译自英文原文。
评论
还没有评论。快来抢沙发。


