SheepDev

数据格式与结构化数据

CSV 列错位了,如何检查引号和换行?

使用工具

两列表导入成三列,某条记录像是溢出到下一行。别立即删逗号或换行,它们可能属于地址或备注。引号决定逗号是分隔符还是数据。

用 CSV 编辑器表格和 JSON/CSV 转换检查各值落在哪个单元格。例子是虚构 UTF-8 数据,乱码应先单独检查编码。目标是正确读取边界,而非修改值来美化原文。

把地址逗号保留在一个单元格

未加引号的输入
id,address
001,North, Building A

表头两列,数据行却有两个逗号,按逗号解析会出现列数不符。Building A 不一定是第三列;若整个地址是一个值,应给完整值加双引号,不要默默丢弃多余列。

完整地址加引号
id,address
001,"North, Building A"

表格应显示两个值 001 与 North, Building A,地址不含边界引号。转换 JSON 可确认 001 仍是字符串,但其他表格软件可能推断为数字,下一步仍需检查列类型。

看似三行,也可能只有一条记录

备注内有换行的 CSV
id,note
001,"first line
second line"

这是表头加一条数据,note 的引号跨越物理换行,两行属于同一单元格。表格显示一个备注,JSON 在字符串中表示换行。源码行数不等于记录数。

去重行、删空行可能删掉引号内备注的一部分。操作 CSV 应先按记录解析,不应照搬逐行日志处理。若接收方不允许值内换行,需先约定替换规则并说明值会改变。

值内的引号写成两个引号

含引号的商品名
id,name
001,"Notebook ""mini"""

name 应显示 Notebook "mini"。外层引号界定字段,内部连续两个引号代表一个字面引号。JSON 的反斜杠写法不能直接代替 CSV 引号规则,应区分目标值与各格式表示。

全部加引号会改变简单值的源码外观。重新解析后单元格相同,就只是表示变化。源码不同不一定丢数据,字面引号消失才是值变化,应比较解析后的值。

全部挤成一列时检查分隔符

分号分隔示例
id;amount
001;12.50

按逗号读取时 id;amount 可能成为一个表头。改为分号后应分成两列。能解析成一列不证明正确,应核对名称、列数与首末记录,不要全局替换值内标点来弥补错误设置。

编辑器按所选分隔符解释输入,不要假设有独立的输入/输出分隔符控件。先正确解析,必要时经 JSON 检查值。小数逗号与字段分隔符是不同角色。

检查空值、零和类似公式的文字

空单元格不等于显式零,CSV 也可能无法保留空字符串与 JSON null 的区别。把空值都改为 0 会改变缺失含义。类型和缺失规则由双方约定,不应在修引号时自行补定义。

交给表格软件前检查 = 等开头文字。公式中和会给值加前缀,数据因此改变。给人阅读的表格与给程序保留原值的导出应区分;CSV 加引号并非通用防公式执行措施。

保留地址逗号、多行备注、带引号名称、前导零 ID 的小样本,并注明记录数和单元格预期值。两三条虚构记录通常足以复现生产导入问题,也能减少共享信息。

参考资料

使用工具

指南 →