逗号分隔值 (Comma-Separated Values, CSV ,有时也称为 字符分隔值 ,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个 字符 序列,不含必须像 二进制数字 那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由 字段 组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或 制表符 。通常,所有记录都有完全相同的字段序列。通常都是 纯文本文件 。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是bit ASCII 是最基本的通用编码。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。
“CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
  1. 纯文本,使用某个字符集,比如 ASCII Unicode EBCDIC GB2312
  2. 由记录组成(典型的是每行一条记录);
  3. 每条记录被 分隔符 分隔为 字段 (典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
  4. 每条记录都有同样的字段序列。
在这些常规的约束条件下,存在着许多CSV变体,故CSV文件并不完全互通。然而,这些变异非常小,并且有许多应用程序允许用户预览文件(这是可行的,因为它是纯文本),然后指定分隔符、转义规则等。如果一个特定CSV文件的变异过大,超出了特定接收程序的支持范围,那么可行的做法往往是人工检查并编辑文件,或通过简单的程序来修复问题。因此在实践中,CSV文件还是非常方便的。
下面是一个实际 CSV 文件中的部分内容,让大家对他有一个感性的认识。我们选的是 Sjojo_Rescan 的 CSV 文件 (Sjojo 是 ASW- 亚洲扫图风的成员之一)。
sj_mino1001.jpg,715282,4FB55FE8,
sj_mino1002.jpg,471289,93203C5C,
sj_mino1003.jpg,451929,C4E80467,
通常 CSV 文件开头是不留空的,以行为单位,每行中记录一张图片的多项数据,每项数据用逗号来分隔(标准英文逗号)。一般说来集图用的.CSV 文件的格式是这样的:
文件名, 文件大小 (以字节为单位),CRC 校验值, 注释 (可省略)
sj_mino1001.jpg,715282,4FB55FE8,
| | | |
文件名 文件大小 CRC 值 注释 (已省略)
如果你的机器上装了 Microsoft Excel 的话,.csv 文件默认是被 Excel 打开的。需要注意的是,当你双击一个.CSV 文件,Excel 打开它以后即使不做任何的修改,在关闭的时候 Excel 往往会提示是否要改成正确的文件格式,这个时候如果选择“是”,因为 Excel 认为.CSV 文件中的数字是要用 科学记数法 来表示的,Excel 会把 CSV 文件中所有的数字用科学计数来表示(2.54932E+5 这种形式),这样操作之后,只是在 Excel 中显示的时候会不正常,而 csv 文件由于是纯文本文件,在使用上没有影响;如果选择了“否”,那么会提示你以 xls 格式另存为 Excel 的一个副本。
所以如果你的 CSV 文件绝大部分都是用在集图上的话,建议把.CSV 的默认打开方式改成任意一个文本 编辑器 ,系统自带的记事本就是个不错的选择。
好,让我们回到 CSV 文件的格式中来。见上面,从左到右 sj_mino1001.jpg 是文件名,715282 是以字节表示的文件大小。当文件名中包含逗号的时候,由于逗号在 CSV 文件中特殊的作用,为了不至于产生歧义,需要用引号把文件名括起来。比如 "The Art, Fantasy.jpg",384211,...,.... 接着是一个 8 位的 16 进制数字 4FB55FE8,这是文件的 CRC32 校验值。整个 CSV 文件的精髓都在这里。
让我们举个小例子来说明它的意义:Sjojo 发布了一张图 sj_mino1001.jpg,假设你是从朋友手中拿到这张图的,那么你肯定常常会有这样的疑问,这张图在传播的过程中是否被改动过呢?是否无意中遭到了损坏呢?CRC 就是为解决这个问题而存在的。
一般情况下,扫图家每发布了一套图,就同时放出一个 CSV 文件(这种 CSV 通常叫做 Official CSV,也就是官方发布的 CSV 的意思),这个 CSV 中的 CRC 值是用专门的软件通过 CRC32 算法(常用的 CRC 算法还有 CRC16)对文件运算后生成的一个值, 这个值可用作文件真身的标志。在绝大多数情况下,如果这个文件在传播过程中无论是大小还是内容被改动过。那么,用同样的 CRC32 算法再对文件进行运算后产生的 CRC 校验值就完全不一样了。如果得出的 CRC 值是一样的,则完全有理由认为这个文件是真身,没有被改动过。还有些时候,收来的图片文件名被改动过了,那么你怎么知道谁是谁呢?
这个时候 CRC 值又起作用了:用专用的软件对图片处理后,可以得到文件的大小和 CRC 值,然后根据大小和 CRC 值在 CSV 中寻找是否有适合的图片。如果有,就会把图片的名字改成 CSV 里的。
举个例子,你收到了一张图片,名字是 pic0001.jpg,同时你知道这张图片是 Sjojo_Rescan 这个集子里面的,但是不知道具体是哪一张。用软件得到它的大小和 CRC 分别是 715282 和 4FB55FE8,那么软件在 CSV 文件里找到一行 sj_mino1001.jpg,715282,4FB55FE8, 大小和 CRC 都符合,软件就认为这张图片的原名是 sj_mino1001.jpg,接着自动把文件的名字改成 sj_mino1001.jpg
改动的不是 CSV 文件而是图片的文件名。接下来的是注释和说明,可以省略掉。需要注意的是注释的后面是没有逗号的,如果要省略注释的话,一定要在 CRC 值的后面保留一个逗号,否则软件会把 CRC 值认为是注释的。
逗号分隔列出日期之前,尽早从个人电脑,但被广泛应用于最早前 IBM 个人电脑时代的个人电脑磁带存储备份和交 换的信息的数据库机器的两种不同的架构。在这一天,负担得起的 硬盘驱动器 不存在,和许多小型企业试图实现 效益的计算使用软盘的软件。
CSV没有通用标准规范。不同的程序间CSV的标准有差异很常见,这可能导致交互操作困难。互联网通信的CSV文件,资料的IETF文件( 符合RFC 4180于2005年10月)介绍了格式的“text/csv格式”MIME类型登记的IANA负责。另一个相关的规格是由派出文字其中也包括CSV格式。
许多非正式文件的存在,说明CSV格式。如何: 逗号分隔值 (CSV)文件格式概述了CSV格式中使用最广泛的应用和解释它如何能最好地利用和支持。

CSV 基本规则

CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符。字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住。行内包含一个项目是空字符串,可以以双引号括住。字段的值包含双引号时,要双写这个双引号(就像把一个双引号当做转义符一样)。CSV文件格式并不需要特定的字符编码,字节顺序,或行终止格式。
  • 每个记录是一个行终止了换行符( ASCII码 /低频= 0×0A)或回车换行符和一双(ASCII码/ CRLF = 0×0D0×0A),然而,线路中断可以嵌入。
  • 字段用逗号分隔(虽然地点在逗号作为小数点,分号是用来代替作为定界符)
1997,Ford,E350
  • 在某些的CSV实施,领导和尾随空格或制表符,毗邻逗号,装饰。这种做法是有争议的 , 实际上是明文禁止的RFC 4180,其中规定,“被认为是空间的一个组成部分领域 , 而不应被忽视。”
  • 各领域内的嵌入式逗号必须存放在双引号字符。
  • 各领域内的嵌入式双引号字符必须是封闭的双引号字符,每一个嵌入式双引号字符必须用一对双引号字符。
  • 各领域内的嵌入式换行符必须封闭在双引号字符。
  • 领域的前导或尾随空格内必须封闭双引号字符。 (见评论领导和尾随 空格 以上。)
  • 字段可能永远是封闭的双引号字符,是否有必要或没有。
  • 第一条记录中的CSV文件中可能包含列名的每个领域。

CSV 举例说明

制造商
型号
说明
价值
1997
Ford
E350
ac, abs, moon
3000.00
1999
Chevy
Venture "Extended Edition"

4900.00
1999
Chevy
Venture "Extended Edition, Very Large"

5000.00
1996
Jeep
Grand Cherokee
MUST SELL!
air, moon roof, loaded
4799.00
上面表格内容若以CSV格式表示就会像下列:
年,制造商,型号,说明,价值
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00
以上这个CSV的例子说明了:
  • 包含逗号, 双引号, 或是换行符的字段必须放在引号内.
  • 字段内部的引号必须在其前面增加一个引号来实现文字引号的转码.
  • 分隔符逗号前后的空格 可能不会 被修剪掉. 这是RFC 4180的要求.
  • 元素中的换行符将被保留下来.
打开包含地址数据的 Excel 工作簿。
在地址示例中,第一个地址包含四行,第二个地址仅包含三行。此外,每个地址集之间相隔一行。
要将地址数据成功转换为 CSV 文本文件,所有地址必须包含相同的行数并且每个地址集之间相隔的行数必须相同。例如,将地址示例更改为以下形式:
A1:Jane Clayton
A2:Microsoft
A3:456 Elm Street
A4:Sometown, USA 67890
A5:
A6:
A7:Jose Saraiva
A8:789 Oak Road
A9:
A10:Mytown, USA 54321
注意:每个地址集都包含四行,相隔两行。
要在 Excel 工作表中插入新行,请选择要在其上插入新行的行标题。在“插入”菜单上,单击“行”。
注意:在 Excel 2007 中,要在工作表中插入新行,需选择要在其上插入新行的行,单击“主页”选项卡上“单元格”组中的“插入”,然后单击“插入工作表行”。
在“文件”菜单上,单击“另存为”。
注意:在 Excel 2007 中,单击“Office 按钮”,然后单击“另存为”。
在“另存为”对话框中执行以下操作:
在“保存类型”框中,单击“CSV (逗号分隔)(*.csv)”。
在“文件名”框中,键入 CSV 文件的名称(例如 Address.csv),然后单击“保存”。
如果收到下面的消息,请单击“确定”:
选定的文件类型不支持包含多个工作表的工作簿。
· 如果只保存活动工作表,请单击“确定”按钮。
· 如果要保存所有工作表,请使用不同的文件名将其分别保存,或选择一种支持多工作表的文件类型。
在收到以下消息时单击“是”:
Address.csv 可能含有与 CSV (逗号分隔) 不 兼容 的功能。是否保持工作簿的这种格式?
· 如要保持这种格式,去掉所有不兼容的功能,请单击“是”。
· 如要保留这些功能,请单击“否”。然后再用最新 Excel 格式保存一份副本。
· 如想知道哪些内容会丢失,请单击“帮助”。
在“文件”菜单上,单击“关闭”,然后退出 Microsoft Excel。