财务发来一个 CSV,双击用 Excel 打开,身份证号后三位变成了 000,手机号成了 1.38E+10 这种科学计数法。文件本身没坏,是打开方式不对,跟格式无关。
CSV 是纯文本,英文全称 Comma-Separated Values,用逗号分隔字段,一行一条记录。它没有样式、没有数据类型、没有工作表的概念,记事本也能打开。正因为简单,几乎所有系统都支持导出和导入。
几条实际会碰到的规则
- 编码:国内系统导出的多是 GBK,用 UTF-8 打开会乱码;带 BOM 的 UTF-8 在 Excel 里才不容易乱
- 分隔符:标准是逗号,也有用分号或制表符的,部分欧洲国家因为小数点是逗号,改用分号
- 引号:字段里本身有逗号或换行,要用双引号包起来,字段内的双引号写成两个
- 表头:第一行通常是列名,但不是强制要求,读的时候要先确认
怎么打开才不变形
Excel 别直接双击。新建空白表,走数据选项卡的从文本导入,第一步选编码,第二步把长数字列设为文本,再导入。程序里读更可控,PowerShell 可以指定编码,取前几行看看结构。
Import-Csv orders.csv -Encoding UTF8 | Select-Object -First 5Python 里用 pandas 的 read_csv,注意 dtype 参数,把订单号、身份证这类列显式设成字符串,不然前导零会丢。分隔符不对就传 sep,编码不对就传 encoding,这两个参数能解决大半问题。
还有一点,CSV 本身没有行列数上限,但 Excel 单表最多 1048576 行,超了会在导入时被截断,看着像数据丢了,其实是工具的限制。行数多的文件,导入前先数一下。
另一类坑在于,CSV 没有统一标准,各家实现细节不一样。字段里带换行,某些工具会解析错行;空值有的写成空,有的写成 NULL,导入后类型会错。要求高的场景,宁可上 xlsx,别硬用 CSV 省事。数据交换图方便用 CSV,要对格式和类型有保证,就该换格式。