逗號分隔值(Comma-Separated Values,CSV,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾枺?,其文件以純文本形式存儲表格?shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個(gè)字符序列,不含必須像二進(jìn)制數(shù)字那樣被解讀的數(shù)據(jù)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。建議使用WORDPAD或是記事本(NOTE)來開啟,再則先另存新檔后用EXCEL開啟,也是方法之一。

CSV文件格式的通用標(biāo)準(zhǔn)并不存在,但是在RFC 4180中有基礎(chǔ)性的描述。使用的字符編碼同樣沒有被指定,但是7-bitASCII是最基本的通用編碼。

中文名

逗號分隔值

外文名

Comma-Separated Values

別名

CSV

應(yīng)用

在程序之間轉(zhuǎn)移表格數(shù)據(jù)

用法

CSV是一種通用的、相對簡單的文件格式,被用戶、商業(yè)和科學(xué)廣泛應(yīng)用。最廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),而這些程序本身是在不兼容的格式上進(jìn)行操作的(往往是私有的和/或無規(guī)范的格式)。因?yàn)榇罅砍绦蚨贾С帜撤NCSV變體,至少是作為一種可選擇的輸入/輸出格式。

例如,一個(gè)用戶可能需要交換信息,從一個(gè)以私有格式存儲數(shù)據(jù)的數(shù)據(jù)庫程序,到一個(gè)數(shù)據(jù)格式完全不同的電子表格。最可能的情況是,該數(shù)據(jù)庫程序可以導(dǎo)出數(shù)據(jù)為“CSV”,然后被導(dǎo)出的CSV文件可以被電子表格程序?qū)搿?/p>

“CSV”并不是一種單一的、定義明確的格式(盡管RFC 4180有一個(gè)被通常使用的定義)。因此在實(shí)踐中,術(shù)語“CSV”泛指具有以下特征的任何文件:

純文本,使用某個(gè)字符集,比如ASCII、Unicode、EBCDIC或GB2312;

由記錄組成(典型的是每行一條記錄);

每條記錄被分隔符分隔為字段(典型分隔符有逗號、分號或制表符;有時(shí)分隔符可以包括可選的空格);

每條記錄都有同樣的字段序列。

在這些常規(guī)的約束條件下,存在著許多CSV變體,故CSV文件并不完全互通。然而,這些變異非常小,并且有許多應(yīng)用程序允許用戶預(yù)覽文件(這是可行的,因?yàn)樗羌兾谋荆缓笾付ǚ指舴?、轉(zhuǎn)義規(guī)則等。如果一個(gè)特定CSV文件的變異過大,超出了特定接收程序的支持范圍,那么可行的做法往往是人工檢查并編輯文件,或通過簡單的程序來修復(fù)問題。因此在實(shí)踐中,CSV文件還是非常方便的。

規(guī)則

1 開頭是不留空,以行為單位。

2 可含或不含列名,含列名則居文件第一行。

3 一行數(shù)據(jù)不跨行,無空行。

4 以半角逗號(即,)作分隔符,列為空也要表達(dá)其存在。

5 列內(nèi)容如存在半角逗號(即,)則用半角雙引號(即"")將該字段值包含起來。

6 列內(nèi)容如存在半角引號(即")則應(yīng)替換成半角雙引號("")轉(zhuǎn)義,并用半角引號(即"")將該字段值包含起來。

7 文件讀寫時(shí)引號,逗號操作規(guī)則互逆。

8 內(nèi)碼格式不限,可為 ASCII、Unicode 或者其他。

9 不支持特殊字符

實(shí)例

下面是一個(gè)實(shí)際 CSV 文件中的部分內(nèi)容,讓大家對他有一個(gè)感性的認(rèn)識。我們選的是 Sjojo_Rescan 的 CSV 文件 (Sjojo 是 ASW- 亞洲掃圖風(fēng)的成員之一)。

sj_mino1001.jpg,715282,4FB55FE8,

sj_mino1002.jpg,471289,93203C5C,

sj_mino1003.jpg,451929,C4E80467,

通常 CSV 文件開頭是不留空的,以行為單位,每行中記錄一張圖片的多項(xiàng)數(shù)據(jù),每項(xiàng)數(shù)據(jù)用逗號來分隔(標(biāo)準(zhǔn)英文逗號)。一般說來集圖用的.CSV 文件的格式是這樣的:

文件名, 文件大小 (以字節(jié)為單位),CRC 校驗(yàn)值, 注釋 (可省略)

sj_mino1001.jpg,715282,4FB55FE8,

| | | |

文件名 文件大小 CRC 值 注釋 (已省略)

如果你的機(jī)器上裝了 Microsoft Excel的話,.csv 文件默認(rèn)是被Excel打開的。需要注意的是,當(dāng)你雙擊一個(gè).CSV 文件,Excel 打開它以后即使不做任何的修改,在關(guān)閉的時(shí)候 Excel 往往會提示是否要改成正確的文件格式,這個(gè)時(shí)候如果選擇“是”,因?yàn)?Excel 認(rèn)為.CSV 文件中的數(shù)字是要用科學(xué)記數(shù)法來表示的,Excel 會把 CSV 文件中所有的數(shù)字用科學(xué)計(jì)數(shù)來表示(2.54932E+5 這種形式),這樣操作之后,只是在 Excel 中顯示的時(shí)候會不正常,而 csv 文件由于是純文本文件,在使用上沒有影響;如果選擇了“否”,那么會提示你以 xls 格式另存為 Excel 的一個(gè)副本。

所以如果你的 CSV 文件絕大部分都是用在集圖上的話,建議把.CSV 的默認(rèn)打開方式改成任意一個(gè)文本 編輯器,系統(tǒng)自帶的記事本就是個(gè)不錯的選擇。

好,讓我們回到 CSV 文件的格式中來。見上面,從左到右 sj_mino1001.jpg 是文件名,715282 是以字節(jié)表示的文件大小。當(dāng)文件名中包含逗號的時(shí)候,由于逗號在 CSV 文件中特殊的作用,為了不至于產(chǎn)生歧義,需要用引號把文件名括起來。比如 "The Art, Fantasy.jpg",384211,...,.... 接著是一個(gè) 8 位的 16 進(jìn)制數(shù)字 4FB55FE8,這是文件的 CRC32 校驗(yàn)值。整個(gè) CSV 文件的精髓都在這里。

讓我們舉個(gè)小例子來說明它的意義:Sjojo 發(fā)布了一張圖 sj_mino1001.jpg,假設(shè)你是從朋友手中拿到這張圖的,那么你肯定常常會有這樣的疑問,這張圖在傳播的過程中是否被改動過呢?是否無意中遭到了損壞呢?CRC 就是為解決這個(gè)問題而存在的。

一般情況下,掃圖家每發(fā)布了一套圖,就同時(shí)放出一個(gè) CSV 文件(這種 CSV 通常叫做 Official CSV,也就是官方發(fā)布的 CSV 的意思),這個(gè) CSV 中的 CRC 值是用專門的軟件通過 CRC32 算法(常用的 CRC 算法還有 CRC16)對文件運(yùn)算后生成的一個(gè)值,這個(gè)值可用作文件真身的標(biāo)志。在絕大多數(shù)情況下,如果這個(gè)文件在傳播過程中無論是大小還是內(nèi)容被改動過。那么,用同樣的 CRC32 算法再對文件進(jìn)行運(yùn)算后產(chǎn)生的 CRC 校驗(yàn)值就完全不一樣了。如果得出的 CRC 值是一樣的,則完全有理由認(rèn)為這個(gè)文件是真身,沒有被改動過。還有些時(shí)候,收來的圖片文件名被改動過了,那么你怎么知道誰是誰呢?

這個(gè)時(shí)候 CRC 值又起作用了:用專用的軟件對圖片處理后,可以得到文件的大小和 CRC 值,然后根據(jù)大小和 CRC 值在 CSV 中尋找是否有適合的圖片。如果有,就會把圖片的名字改成 CSV 里的。

舉個(gè)例子,你收到了一張圖片,名字是 pic0001.jpg,同時(shí)你知道這張圖片是 Sjojo_Rescan 這個(gè)集子里面的,但是不知道具體是哪一張。用軟件得到它的大小和 CRC 分別是 715282 和 4FB55FE8,那么軟件在 CSV 文件里找到一行 sj_mino1001.jpg,715282,4FB55FE8, 大小和 CRC 都符合,軟件就認(rèn)為這張圖片的原名是 sj_mino1001.jpg,接著自動把文件的名字改成 sj_mino1001.jpg

改動的不是 CSV 文件而是圖片的文件名。接下來的是注釋和說明,可以省略掉。需要注意的是注釋的后面是沒有逗號的,如果要省略注釋的話,一定要在 CRC 值的后面保留一個(gè)逗號,否則軟件會把 CRC 值認(rèn)為是注釋的。

規(guī)范

逗號分隔列出日期之前,盡早從個(gè)人電腦,但被廣泛應(yīng)用于最早前IBM個(gè)人電腦時(shí)代的個(gè)人電腦磁帶存儲備份和交 換的信息的數(shù)據(jù)庫機(jī)器的兩種不同的架構(gòu)。在這一天,負(fù)擔(dān)得起的硬盤驅(qū)動器不存在,和許多小型企業(yè)試圖實(shí)現(xiàn) 效益的計(jì)算使用軟盤的軟件。

CSV沒有通用標(biāo)準(zhǔn)規(guī)范。不同的程序間CSV的標(biāo)準(zhǔn)有差異很常見,這可能導(dǎo)致交互操作困難?;ヂ?lián)網(wǎng)通信的CSV文件,資料的IETF文件(符合RFC 4180于2005年10月)介紹了格式的“text/csv格式”MIME類型登記的IANA負(fù)責(zé)。另一個(gè)相關(guān)的規(guī)格是由派出文字其中也包括CSV格式。

許多非正式文件的存在,說明CSV格式。如何:逗號分隔值(CSV)文件格式概述了CSV格式中使用最廣泛的應(yīng)用和解釋它如何能最好地利用和支持。

基本規(guī)則

CSV格式是分隔的數(shù)據(jù)格式,有字段/列分隔的逗號字符和記錄/行分隔換行符。字段包含特殊字符(逗號,換行符,或雙引號),必須以雙引號括住。行內(nèi)包含一個(gè)項(xiàng)目是空字符串,可以以雙引號括住。字段的值包含雙引號時(shí),要雙寫這個(gè)雙引號(就像把一個(gè)雙引號當(dāng)做轉(zhuǎn)義符一樣)。CSV文件格式并不需要特定的字符編碼,字節(jié)順序,或行終止格式。

每個(gè)記錄是一個(gè)行終止了換行符(ASCII碼/低頻= 0×0A)或回車換行符和一雙(ASCII碼/ CRLF = 0×0D0×0A),然而,線路中斷可以嵌入。

字段用逗號分隔(雖然地點(diǎn)在逗號作為小數(shù)點(diǎn),分號是用來代替作為定界符)

1997,Ford,E350

在某些的CSV實(shí)施,領(lǐng)導(dǎo)和尾隨空格或制表符,毗鄰逗號,裝飾。這種做法是有爭議的,實(shí)際上是明文禁止的RFC 4180,其中規(guī)定,“被認(rèn)為是空間的一個(gè)組成部分領(lǐng)域,而不應(yīng)被忽視?!?/p>

各領(lǐng)域內(nèi)的嵌入式逗號必須存放在雙引號字符。

各領(lǐng)域內(nèi)的嵌入式雙引號字符必須是封閉的雙引號字符,每一個(gè)嵌入式雙引號字符必須用一對雙引號字符。

各領(lǐng)域內(nèi)的嵌入式換行符必須封閉在雙引號字符。

領(lǐng)域的前導(dǎo)或尾隨空格內(nèi)必須封閉雙引號字符。 (見評論領(lǐng)導(dǎo)和尾隨空格以上。)

字段可能永遠(yuǎn)是封閉的雙引號字符,是否有必要或沒有。

第一條記錄中的CSV文件中可能包含列名的每個(gè)領(lǐng)域。

舉例說明
制造商型號說明價(jià)值
1997FordE350ac, abs, moon3000.00
1999ChevyVenture "Extended Edition"4900.00
1999ChevyVenture "Extended Edition, Very Large"5000.00
1996JeepGrand CherokeeMUST SELL! air, moon roof, loaded4799.00

上面表格內(nèi)容若以CSV格式表示就會像下列:

年,制造商,型號,說明,價(jià)值

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

以上這個(gè)CSV的例子說明了:

包含逗號, 雙引號, 或是換行符的字段必須放在引號內(nèi).

字段內(nèi)部的引號必須在其前面增加一個(gè)引號來實(shí)現(xiàn)文字引號的轉(zhuǎn)碼.

分隔符逗號前后的空格 可能不會 被修剪掉. 這是RFC 4180的要求.

元素中的換行符將被保留下來.

作用

相信看完上面的一大堆東西后,你不但對 CSV 文件有了個(gè)大概地了解,對它的用途應(yīng)該也有些模糊的概念了吧。我們收集圖片往往是通過各種各樣不同的渠道,比如從網(wǎng)站上,IRC 上,抑或干脆是朋友送的光盤。在整個(gè)的傳播過程中,圖片有可能遭受到各種各樣的非人待遇。尤其是從網(wǎng)站上收來的圖片。有些時(shí)候僅僅是簡單的改了一下名字,更多的時(shí)候由于很多 PLMM 站空間有限,常把圖片的尺寸縮小,或者把圖片文件縮小。一張 1356x588 的圖被改成了 678x294,或者一個(gè)四五百 K 的文件被縮成了幾十 K 都是常有的事。比較可惡的是,許多網(wǎng)站把原來掃圖家的 Logo 去掉,打上自己網(wǎng)站的 Logo。還有些許搞笑派的玩家,把各種各樣的圖片移花接木,改頭換面。這些對于一般的看圖娛樂無傷大雅,但是對于集圖來說,收到這樣的圖片是無法容忍的。如何驗(yàn)明圖片的正身,這是掃圖家和集圖者共同面對的問題。CSV 文件就是為了解決這樣的問題而出現(xiàn)的。CSV 文件最早用在簡單的數(shù)據(jù)庫里,由于其格式簡單,并具備很強(qiáng)的開放性,所以起初被掃圖家用作自己圖集的標(biāo)記。如上面所說的,CSV 文件是個(gè)純文本文件,每一行表示一張圖片的許多屬性。你在收一套圖集時(shí),只要能找到它的 CSV 文件,用專用的軟件校驗(yàn)后,你對該圖集的狀況就可以了如指掌。比如這套圖一共有多少張,你收到了多少張,哪些是原圖,那些是可能被改動過或者損壞了的圖片...... 我們可以把.CSV 文件看作一份索引,你不但可以"按圖索驥",還可以檢查自己收來的"馬子"血統(tǒng)是 否純正。

來源

CSV 文件的來源通常有兩種:一種是掃圖家自己發(fā)布的 CSV,一般稱作 Official CSV。也就是官方發(fā)布的 CSV,通常說來是有相當(dāng)?shù)臋?quán)威性的。比較特殊的是亞洲的許多掃圖家,除了公開發(fā)布的圖以外,還有一些私下發(fā)布的 Special 圖,或者一些專門送給朋友的圖。加上掃圖家不愿意或者不會做 CSV,所以他們圖集的 CSV 往往由集圖界中一些資深前輩出頭來做。在這種情況下,往往會出現(xiàn)一個(gè)圖集有好幾個(gè)版本的 CSV 文件,并且每個(gè)版本之間都有不小的差別。

文件轉(zhuǎn)換

打開包含地址數(shù)據(jù)的 Excel 工作簿。

在地址示例中,第一個(gè)地址包含四行,第二個(gè)地址僅包含三行。此外,每個(gè)地址集之間相隔一行。

要將地址數(shù)據(jù)成功轉(zhuǎn)換為 CSV 文本文件,所有地址必須包含相同的行數(shù)并且每個(gè)地址集之間相隔的行數(shù)必須相同。例如,將地址示例更改為以下形式:

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

注意:每個(gè)地址集都包含四行,相隔兩行。

要在 Excel 工作表中插入新行,請選擇要在其上插入新行的行標(biāo)題。在“插入”菜單上,單擊“行”。

注意:在 Excel 2007 中,要在工作表中插入新行,需選擇要在其上插入新行的行,單擊“主頁”選項(xiàng)卡上“單元格”組中的“插入”,然后單擊“插入工作表行”。

在“文件”菜單上,單擊“另存為”。

注意:在 Excel 2007 中,單擊“Office 按鈕”,然后單擊“另存為”。

在“另存為”對話框中執(zhí)行以下操作:

在“保存類型”框中,單擊“CSV (逗號分隔)(*.csv)”。

在“文件名”框中,鍵入 CSV 文件的名稱(例如 Address.csv),然后單擊“保存”。

如果收到下面的消息,請單擊“確定”:

選定的文件類型不支持包含多個(gè)工作表的工作簿。

· 如果只保存活動工作表,請單擊“確定”按鈕。

· 如果要保存所有工作表,請使用不同的文件名將其分別保存,或選擇一種支持多工作表的文件類型。

在收到以下消息時(shí)單擊“是”:

Address.csv 可能含有與 CSV (逗號分隔) 不兼容的功能。是否保持工作簿的這種格式?

· 如要保持這種格式,去掉所有不兼容的功能,請單擊“是”。

· 如要保留這些功能,請單擊“否”。然后再用最新 Excel 格式保存一份副本。

· 如想知道哪些內(nèi)容會丟失,請單擊“幫助”。

在“文件”菜單上,單擊“關(guān)閉”,然后退出 Microsoft Excel。