1. CSV 文件基础认知
做配方数据导入,第一个绕不开的就是 CSV。说实话,很多人觉得 CSV 太简单了——不就是个逗号分隔的文本文件吗?但我在项目里见过太多因为 CSV 编码、空行、引号问题导致导入失败的情况。今天咱们就把这些坑一个一个填平。
1.1 什么是 CSV?
CSV 全称 Comma-Separated Values,逗号分隔值。说白了,就是用逗号把数据隔开,一行一条记录。我最早接触 CSV 是在十年前做 ERP 数据迁移的时候,那时候供应商给的数据全是 CSV,打开一看,嗯,就是个文本文件。
一个标准的 CSV 文件长这样:
配方编号,配方名称,物料编码,用量,单位
R001,基础面浆,ML-001,500,g
R002,糖水溶液,ML-002,300,ml
R003,乳化液,ML-003,200,ml
你看,第一行是表头,后面是数据行。每个字段用逗号隔开。就这么简单。
但简单归简单,有几个关键点你得记住:
- 纯文本——不存字体、颜色、合并单元格
- 无格式——不存公式、宏、图表
- 跨平台——Windows、Mac、Linux 都能打开
- 通用性——几乎所有数据处理工具都支持
1.2 CSV 与 Excel 的区别
很多人把 CSV 和 Excel 混为一谈,我刚开始也犯过这个错。有一次客户说「我把 Excel 发给你了」,结果打开一看是 .csv 文件。嗯,这俩其实完全不是一回事。
| 对比维度 | CSV | Excel (.xlsx) |
|---|---|---|
| 本质 | 纯文本文件 | 二进制文件 |
| 格式存储 | 不存储 | 存储字体、颜色、边框 |
| 公式 | 不支持 | 支持 |
| 多工作表 | 不支持(只有1个表) | 支持 |
| 文件大小 | 小(纯文本) | 大(含格式信息) |
| 打开方式 | 记事本、编辑器、Excel 均可 | 需 Excel 或兼容软件 |
| 数据交换 | 极佳(通用格式) | 较差(专有格式) |
我个人习惯:数据交换用 CSV,数据分析用 Excel。CSV 是「数据搬运工」,Excel 是「数据加工厂」。你想想看,如果每次导入配方数据都要打开 Excel 另存为,那批量导入的效率就全毁了。
1.3 CSV 的编码问题:UTF-8 vs GBK
这是我在项目中遇到最多的问题,没有之一。编码不对,数据直接乱码,配方名称变成一堆「锟斤拷」。
为什么会这样?因为 CSV 是纯文本,它必须用一种编码方式来存储字符。中文环境下,最常见的两种编码是:
- UTF-8:国际通用编码,支持所有语言,推荐使用
- GBK:中文专用编码,Windows 简体中文版默认
我建议:统一使用 UTF-8 编码。原因很简单——你的配方数据可能包含英文、数字、特殊符号,UTF-8 都能兼容。而且现在的 Web 系统、数据库、API 接口,基本都认 UTF-8。
怎么确认编码?用记事本打开 CSV,点「另存为」,看右下角的编码选项:
记事本另存为界面:
编码下拉框:ANSI(GBK)、UTF-8、UTF-16
推荐选择:UTF-8
如果你用 VS Code 或 Sublime Text,右下角会直接显示当前编码,点击就能切换。
1.4 CSV 的常见坑点
这部分是我最想跟你分享的。CSV 看起来简单,但坑是真的多。我曾经因为一个空行,导致整个批次的配方数据导入错位,排查了整整一下午。
坑点一:空行
CSV 文件末尾或中间的空行,会被某些解析器当成一条空记录。比如:
配方编号,配方名称,用量
R001,基础面浆,500
← 空行
R002,糖水溶液,300
有些系统读到空行就报错,有些系统会插入一条空数据。我的建议:导入前用脚本清理空行。
# Python 示例:清理 CSV 空行
with open('配方数据.csv', 'r', encoding='utf-8') as f:
lines = [line for line in f if line.strip()]
# 现在 lines 里没有空行了
坑点二:引号转义
如果数据里包含逗号、换行符、引号本身,CSV 会用双引号包裹。比如:
配方编号,配方名称,备注
R001,基础面浆,"含"食品级"添加剂"
这里就有问题——数据里的双引号没有转义。正确的写法是:
配方编号,配方名称,备注
R001,基础面浆,"含""食品级""添加剂"
规则很简单:数据中的双引号,用两个双引号转义。整个字段再用一对双引号包裹。
坑点三:逗号在数据中
配方用量里如果有逗号,比如「1,500g」,解析器会把它当成两个字段。解决办法:用双引号包裹。
配方编号,配方名称,用量
R001,基础面浆,"1,500"
坑点四:BOM 头
UTF-8 编码的 CSV 有时会带 BOM(Byte Order Mark),就是文件开头的三个字节 EF BB BF。Excel 保存 UTF-8 CSV 时默认加 BOM,但有些系统不认 BOM,会把它当成数据的一部分。
我的做法:统一用 UTF-8 without BOM。VS Code 保存时选「UTF-8 with BOM」或「UTF-8」就能控制。
1.5 知识结构总览
下面这张图,把 CSV 的核心知识点串起来了。你可以把它当成一个快速参考。
1.6 本章小结
CSV 是配方数据批量导入的基石。你不需要成为 CSV 专家,但下面这几点一定要记住:
- CSV 是纯文本,不是 Excel,别指望它存格式
- 编码用 UTF-8,别用 GBK,除非你确定上下游都支持
- 空行和引号是最大的坑,导入前必须清理和校验
- 数据中的逗号要用双引号包裹,引号本身要转义