数据格式与结构化数据
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 仍是字符串,但其他表格软件可能推断为数字,下一步仍需检查列类型。
看似三行,也可能只有一条记录
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 的小样本,并注明记录数和单元格预期值。两三条虚构记录通常足以复现生产导入问题,也能减少共享信息。