CSV

2019/06/15 other

手头积累了一些数据,想生成对比分析报表,图片比较直观但是塞不进太多细节,因此还是决定采用简单的csv(Comma-Separated Values)格式,方便其他人用excel等软件操作。

虽然csv格式的定义比较简单,但实际上csv格式有自己的详细定义,包括指定非逗号的分割符,如何转义分割符和换行符,如何转义转义符等等,有兴趣的话可以参考 RFC 4180。这里稍微精简下说明:

  1. 每一行用回车换行符分隔,CRLF,也就是 \r\n
  2. 每列用逗号分隔,,,每行的列数要一致
  3. 列中的数据如果有逗号,回车换行符或者双引号,此列需要放在双引号内转义
  4. 双引号内的双引号需要用两个双引号转义

各编程语言通常有csv的库(也有excel的库),但是如果不牵涉到复杂的情况,一般可以自己直接拼接,免去学一个库的负担。如果数据中的内容你无法掌控,还是老老实实选个流行库操作吧。

如果csv中有unicode字符,例如中文,用excel打开时会乱码,虽然采用gbk编码也可以解决这个问题,但是更常见的是在文件起始处加入UTF-8 BOM头部信息,即\ufeff

由于csv没有格式控制,excel在打开时会尝试解析数据并设置格式,在解析日期或时间时通常显示会有问题,如果需要规避,可以用="数据"的方式强制指定为文本。

License: (CC 3.0) BY-NC-SA

Search

    Table of Contents