csv文件的格式

CSV即Comma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互的格式。

csv是一种纯文本文件。

csv文件由任意数目的记录构成,记录间以换行符分割,每条记录由字段构成,字段间以逗号作为分隔符。

如果字段中有逗号,那么用双引号引用。

https://tools.ietf.org/html/rfc4180

具体文件格式

1.每条记录占一行 以逗号为分隔符
2.逗号前后的空格会被忽略
3.字段中包含有逗号,该字段必须用双引号括起来
4.字段中包含有换行符,该字段必须用双引号括起来
5.字段前后包含有空格,该字段必须用双引号括起来
6.字段中的双引号用两个双引号表示
7.字段中如果有双引号,该字段必须用双引号括起来
8.第一条记录,可以是字段名

John,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123

什么是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
  1. 文件中的最后一行记录可以有结尾回车换行符,也可以没有。

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

aaa,bbb,ccc CRLF
zzz,yyy,xxx
  1. 第一行可以存在一个可选的标题头,格式和普通记录行的格式一样。标题头要包含文件记录字段对应的名称,应该有和记录字段一样的数量。(在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
  1. 在标题头行和普通行每行记录中,会存在一个或多个由半角逗号(,)分隔的字段。整个文件中每行应包含相同数量的字段,空格也是字段的一部分,不应被忽略。每一行记录最后一个字段后不能跟逗号。(通常用逗号分隔,也有其他字符分隔的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
  1. 每个字段可用也可不用半角双引号(“)括起来(不过有些程序,如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
  1. 字段中若包含回车换行符、双引号或者逗号,该字段需要用双引号括起来。

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
  1. 如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。

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中有要求:

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

使用时需要注意。

ref link:

  1. https://www.cnblogs.com/hustdc/p/10189109.html
  2. https://www.jianshu.com/p/54b3afc06126
  3. https://blog.csdn.net/hemeinvyiqiluoben/article/details/84339445

csv文件的格式---Comma Separate Values相关推荐

  1. CSV文件(utf-8格式)用excel打开乱码繁体转简体

    将CSV文件用记事本另存为 ANSI 格式 用excel打开 Excel--审阅--简繁转换 若找不到简繁转换: https://zhidao.baidu.com/question/531257440 ...

  2. postgresql 客户端导入csv文件命令格式

    psql -h192.168.1.1 -p15432 -Upostgres -d npas -c "copy npas.npa_de_cover_point from stdin with ...

  3. csv和excel php 解析_php读取csv文件(excel可另存为csv格式文件)

    csv文件简介 看到这个题目大家一定莫名其妙,这个csv文件和office有啥关系.呵呵,细心地朋友在用excel的时候会发现,excel可以另存为csv格式.我之前也对这个东西没什么了解,只是知道e ...

  4. csv文件中日期格式问题

    csv文件中日期格式问题 我们在hive中做MySQL的 题目时,遇到日期格式不是yyyy-mm-dd时,会比较头疼.关于csv文件日期格式的上传到hdfs中,在做hql题目时用year(purcha ...

  5. java 解析 csv 文件

    文章分类:JavaEye 一.貌似有bug,不行用 二.或 三. 的方法 Java代码   import java.io.BufferedReader; import java.io.FileInpu ...

  6. 用正则表达式和java解析csv文件

    用正则表达式和java解析csv文件 作者:弹着钢琴设计  来源:博客园  发布时间:2009-06-15 18:31  阅读:337 次  原文链接   [收藏]   在解析csv文件之前,先来看看 ...

  7. xls与csv文件区别

    xls 文件就是Microsoft excel电子表格的文件格式.我想就不用多介绍了吧,学校里多少都学过的. CSV是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. 此文件,一行 ...

  8. .csv是什么文件格式,什么软件可以打开?xls与csv文件是什么区别?功能和作用上有什么不同?

    转载地址是:http://hi.baidu.com/hoddhuhqjcbkluq/item/f41fe81c570eb39899ce3388 偶认为重点的地方用粉色标注了出来 用 Office 20 ...

  9. 在csv文件中提取特定的数据做图-以天气为例子

    前言:这是在<python入门>中的一个例子,写成文章,作为学习的复盘. 现在有这么一份天气数据,需要将画出最高温和最低温的曲线图. 前期的基础知识: CSV文件 CSV是最通用的一种文件 ...

  10. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

最新文章

  1. c++ fork 进程时 共享内存_linux共享内存mmap
  2. 程序员终身发展规划---应对中国软件发展的大环境要求
  3. Webpack基础之输出
  4. postgresql存图片字段类型_PostgreSQL 入门
  5. 最新SparkSQL 学习路径. pdf(廖雪峰团队研发)
  6. JavaScript语言基础(一)
  7. python四分位数_Python解释数学系列——分位数Quantile
  8. EJB3.0学习笔记--SOAP-AXIS--深入Soap引擎
  9. 群晖NAS删除文件不释放空间的原因和方法
  10. 详解nodejs中express搭建权限管理系统
  11. C3P0的几种使用方法(非JNDI)
  12. linux字符串替换命令,Linux系统字符串替换命令详细说明
  13. C# 实现局域网的windows环境下的桌面分享
  14. RS-485什么情况下需要上下拉电阻?
  15. 通过className属性给一个元素追加新class(addClass函数)
  16. 《海豚湾》网友评论转载
  17. 分享一下玩滑板的心得体会
  18. 如何建设一个标签库?
  19. python 数组写入文件 并 读取
  20. Acrel-3000在青岛中冶圣乔维斯南区智能住宅小区的应用

热门文章

  1. vue 项目打包后可以改为动态配置域名地址
  2. Cortex-A 架构
  3. 第1章 弗洛依德——精神分析
  4. IP地址归属地查询算法
  5. 有感于李连杰壹基金计划
  6. docker ADD命令的用法
  7. 北京大学王悦博士给学生的话
  8. python中idle_python中的idle是什么意思
  9. python英语单词 扇贝英语安卓下载_扇贝单词英语版app最新版
  10. (Mac) Mac上如何修改本地的hostname