• 什么是CSV
  • CSV的格式规范
  • 关于CSV文件解析

参考于CSV in Wikipedia
参考于RFC 4180
参考于CSV Reader

什么是CSV

逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。每个记录由一个或多个字段组成,用逗号分隔。使用逗号作为字段分隔符是此文件格式的名称的来源,因为分隔字符也可以不是逗号,有时也称为字符分隔值。

CSV广泛用于不同体系结构的应用程序之间交换数据表格信息,解决不兼容数据格式的互通问题,一般按照传输双方既定标准进行格式定义,而其本身并无明确格式标准。

CSV用逗号分隔字段的基本思想是清楚的,但是当字段数据也可能包含逗号或者甚至嵌入换行符时,该想法变得复杂。 CSV实现可能无法处理这些字段数据,或者可能会使用引号来包围字段。引用并不能解决所有问题:有些字段可能需要嵌入引号,因此CSV实现可能包含转义字符或转义序列。

RFC 4180提出了MIME类型(”text/csv”)对于CSV格式的标准,可以作为一般使用的常用定义,满足大多数实现似乎遵循的格式。

CSV的格式规范

下面的格式规范定义来源于RFC 4180,附上原文供参考,一共也就七点。

1. 每一行记录位于一个单独的行上,用回车换行符CRLF(也就是\r\n)分割。

Each record is located on a separate line, delimited by a line break (CRLF). For example:

aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF

2. 文件中的最后一行记录可以有结尾回车换行符,也可以没有。

The last record in the file may or may not have an ending line break. For example:

aaa,bbb,ccc CRLF
zzz,yyy,xxx

3. 第一行可以存在一个可选的标题头,格式和普通记录行的格式一样。标题头要包含文件记录字段对应的名称,应该有和记录字段一样的数量。(在MIME类型中,标题头行的存在与否可以通过MIME type中的可选”header”参数指明)

There maybe an optional header line appearing as the first line of the file with the same format as normal record lines. This header will contain names corresponding to the fields in the file and should contain the same number of fields as the records in the rest of the file (the presence or absence of the header line should be indicated via the optional “header” parameter of this MIME type). For example:

field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF

4. 在标题头行和普通行每行记录中,会存在一个或多个由半角逗号(,)分隔的字段。整个文件中每行应包含相同数量的字段,空格也是字段的一部分,不应被忽略。每一行记录最后一个字段后不能跟逗号。(通常用逗号分隔,也有其他字符分隔的CSV,需事先约定)

Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma. For example:

aaa,bbb,ccc

5. 每个字段可用也可不用半角双引号(“)括起来(不过有些程序,如Microsoft的Excel就根本不用双引号)。如果字段没有用引号括起来,那么该字段内部不能出现双引号字符。

Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields. For example:

"aaa","bbb","ccc" CRLF
zzz,yyy,xxx

6. 字段中若包含回车换行符、双引号或者逗号,该字段需要用双引号括起来。

Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. For example:(下面原文的例子可能有些问题)

"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx

7. 如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。

If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. For example:

"aaa","b""bb","ccc"

关于CSV文件解析

上面说过,CSV并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:

  • 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
  • 由记录组成(典型的是每行一条记录);
  • 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
  • 每条记录都有同样的字段序列。

所以,在常规的约束条件下,存在着许多CSV变体,故CSV文件并不完全互通,如使用约定好的其他分隔符、转义规则等。因此,实际使用CSV需要数据交换双方约定规则(其实大体思路不变,一些细节),在进行CSV文件读写就免不了进行文件的解析。

正如CSV并不明确的格式,CSV文件的解析同样没有标准方法,一般可以自己实现读写,网上也有很多种不同语言的实现版本。例如opencsv、csvreader等。它们可能会与RFC中的规定有所出入,例如在csvreader中有要求:

前缀和后缀的空格字符,逗号和制表符,与逗号或记录分隔符相邻的内容将被修剪。
为了保证前导和后缀空白字符的保留,必须通过将字段嵌入到双引号集合中来限定字段。

使用时需要注意。

理解CSV格式规范(解析CSV必备)相关推荐

  1. 理解CSV格式规范(解析CSV必备)(转载)

    版权声明:据说这里是用来声明原创版权的,我只想说....欢迎转载但请注明出处:http://blog.csdn.net/woaixiaoyu520 https://blog.csdn.net/woai ...

  2. csv格式文件解析失败_理解CSV格式规范(解析CSV必备)

    什么是CSV 逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔. ...

  3. csv格式文件解析失败_由导出CSV文件格式错误的小结

    问题描述: 目前.一般情况下,在web开发过程中,使用导入导出报表的情形很多.我们先说导出.项目数据量多导出行数较多,50万行左右,选择的是csv方式导出.针对以下应用场景,导出过程有几点需要注意的的 ...

  4. php解析压缩包csv文件,php解析csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

  5. 操作csv格式文件之csv.reader()方法

    文章目录 如何使用csv.reader()方法以及csv.reader()方法的作用 如何使用csv.reader()方法以及csv.reader()方法的作用 首先我们我们来用一段代码来处理csv格 ...

  6. java 导出csv 格式,java导出csv格式文件的方法

    这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 imp ...

  7. csv格式文件解析失败_excel遇到的问题---外部表不是预期的格式。/csv 文件导入读取问题...

    检查出了错误,Excel版本问题,Exce连接字符串版本是office2003的 ,更改为Excel2007版本则正常导入. string strConn = "Provider=Micro ...

  8. java 解析csv_java解析CSV文件(getCsvData 解析CSV文件 zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)...

    //CSVUtil.class为类名 private static final Logger log = Logger.getLogger(CSVUtil.class); //filepath 可以为 ...

  9. 使用python将txt格式的数据转换为csv格式,读取csv数据前几行

    首先从文本文件和Excel文件中读入数据,形成dataframe,然后可以将dataframe导出到文本文件.Excel文件中存储起来. 使用如下的python语句: import numpy as ...

最新文章

  1. assets与static的区别
  2. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。(4.0分)_学小易找答案...
  3. 【渝粤题库】国家开放大学2021春2717家畜解剖基础题目
  4. SQL Search
  5. 总结ubuntu 在命令界面login incorrect的问题
  6. 当弱引用对象成为集合元素时
  7. 当调用wcf, 小心返回值包含enum越界的错误。
  8. 开源软件管理调研报告
  9. 健康体检信息管理系统方案/案列/软件/APP/小程序/网站
  10. 江苏大学计算机自动化专业排名2015,自动化专业排名
  11. esp8266使用TF卡并读写数据(基于arduino)
  12. Web在线报表设计器使用指南
  13. linux(安装在虚拟机)读取U盘
  14. python-day18(正式学习)
  15. 由于计算机主板的闪烁存储器中固化了,(大学信息技术题型整理.doc
  16. ubuntu 16.04 卸载软件命令
  17. 万事俱备,只欠价格? — 华为 MateBook 13 长测
  18. MyEclipse 7.1官网下载
  19. TA0043 侦查 Reconnaissance
  20. 负债累累只因创业失败,郑州42岁餐饮老板创业之殇

热门文章

  1. Nginx请求转发端口转发
  2. 某985大学 软件工程专硕,复试线暴涨60分!
  3. 使用mxGraph绘制流程图
  4. 【批量改文件夹中的图片名称-python】
  5. [COCI2014-2015#7] TETA
  6. 计算机会计中出纳的职责有哪些,作为一名学校出纳工作职责有哪些
  7. VMware磁盘变满——磁盘压缩——虚拟机瘦身
  8. H.264编码器基本原理
  9. 图像传感器c语言,[转载]图像传感器的主要特性。
  10. 单片机微型计算机原理及接口技术陈,单片机微型计算机原理及接口技术课后习题答案第4章(5页)-原创力文档...