用法
CSV是一種通用的、相對簡單的檔案格式,被用戶、商業和科學廣泛套用。最廣泛的套用是在程式之間轉移表格數據,而這些程式本身是在不兼容的格式上進行操作的(往往是私有的和/或無規範的格式)。因為大量程式都支持某種CSV變體,至少是作為一種可選擇的輸入/輸出格式。
例如,一個用戶可能需要交換信息,從一個以私有格式存儲數據的資料庫程式,到一個數據格式完全不同的電子表格。最可能的情況是,該資料庫程式可以導出數據為“CSV”,然後被導出的CSV檔案可以被電子表格程式導入。
“CSV”並不是一種單一的、定義明確的格式(儘管RFC 4180有一個被通常使用的定義)。因此在實踐中,術語“CSV”泛指具有以下特徵的任何檔案:
純文本,使用某個字元集,比如ASCII、Unicode、EBCDIC或GB2312;
由記錄組成(典型的是每行一條記錄);
每條記錄被分隔設定分隔為欄位(典型分隔設定有逗號、分號或制表符;有時分隔設定可以包括可選的空格);
每條記錄都有同樣的欄位序列。
在這些常規的約束條件下,存在著許多CSV變體,故CSV檔案並不完全互通。然而,這些變異非常小,並且有許多應用程式允許用戶預覽檔案(這是可行的,因為它是純文本),然後指定分隔設定、轉義規則等。如果一個特定CSV檔案的變異過大,超出了特定接收程式的支持範圍,那么可行的做法往往是人工檢查並編輯檔案,或通過簡單的程式來修復問題。因此在實踐中,CSV檔案還是非常方便的。
規則
1 開頭是不留空,以行為單位。
2 可含或不含列名,含列名則居檔案第一行。
3 一行數據不跨行,無空行。
4 以半角逗號(即,)作分隔設定,列為空也要表達其存在。
5 列內容如存在半角逗號(即,)則用半角雙引號(即"")將該欄位值包含起來。
6 列內容如存在半角引號(即")則應替換成半角雙引號("")轉義,並用半角引號(即"")將該欄位值包含起來。
7 檔案讀寫時引號,逗號操作規則互逆。
8 內碼格式不限,可為 ASCII、Unicode 或者其他。
9 不支持特殊字元
實例
下面是一個實際 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檔案格式並不需要特定的字元編碼,位元組順序,或行終止格式。
每個記錄是一個行終止了換行符(ASCII碼/低頻= 0×0A)或回車換行符和一雙(ASCII碼/ CRLF = 0×0D0×0A),然而,線路中斷可以嵌入。
欄位用逗號分隔(雖然地點在逗號作為小數點,分號是用來代替作為定界符)
1997,Ford,E350
在某些的CSV實施,領導和尾隨空格或制表符,毗鄰逗號,裝飾。這種做法是有爭議的 , 實際上是明文禁止的RFC 4180,其中規定,“被認為是空間的一個組成部分領域 , 而不應被忽視。”
各領域內的嵌入式逗號必須存放在雙引號字元。
各領域內的嵌入式雙引號字元必須是封閉的雙引號字元,每一個嵌入式雙引號字元必須用一對雙引號字元。
各領域內的嵌入式換行符必須封閉在雙引號字元。
領域的前導或尾隨空格內必須封閉雙引號字元。 (見評論領導和尾隨空格以上。)
欄位可能永遠是封閉的雙引號字元,是否有必要或沒有。
第一條記錄中的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的要求.
元素中的換行符將被保留下來.
作用
相信看完上面的一大堆東西後,你不但對 CSV 檔案有了個大概地了解,對它的用途應該也有些模糊的概念了吧。我們收集圖片往往是通過各種各樣不同的渠道,比如從網站上,IRC 上,抑或乾脆是朋友送的光碟。在整個的傳播過程中,圖片有可能遭受到各種各樣的非人待遇。尤其是從網站上收來的圖片。有些時候僅僅是簡單的改了一下名字,更多的時候由於很多 PLMM 站空間有限,常把圖片的尺寸縮小,或者把圖片檔案縮小。一張 1356x588 的圖被改成了 678x294,或者一個四五百 K 的檔案被縮成了幾十 K 都是常有的事。比較可惡的是,許多網站把原來掃圖家的 Logo 去掉,打上自己網站的 Logo。還有些許搞笑派的玩家,把各種各樣的圖片移花接木,改頭換面。這些對於一般的看圖娛樂無傷大雅,但是對於集圖來說,收到這樣的圖片是無法容忍的。如何驗明圖片的正身,這是掃圖家和集圖者共同面對的問題。CSV 檔案就是為了解決這樣的問題而出現的。CSV 檔案最早用在簡單的資料庫里,由於其格式簡單,並具備很強的開放性,所以起初被掃圖家用作自己圖集的標記。 如上面所說的,CSV 檔案是個純文本檔案,每一行表示一張圖片的許多屬性。你在收一套圖集時,只要能找到它的 CSV 檔案,用專用的軟體校驗後,你對該圖集的狀況就可以了如指掌。比如這套圖一共有多少張,你收到了多少張,哪些是原圖,那些是可能被改動過或者損壞了的圖片...... 我們可以把.CSV 檔案看作一份索引,你不但可以"按圖索驥",還可以檢查自己收來的"馬子"血統是 否純正。
來源
CSV 檔案的來源通常有兩種:一種是掃圖家自己發布的 CSV,一般稱作 Official CSV。也就是官方發布的 CSV,通常說來是有相當的權威性的。比較特殊的是亞洲的許多掃圖家,除了公開發布的圖以外,還有一些私下發布的 Special 圖,或者一些專門送給朋友的圖。加上掃圖家不願意或者不會做 CSV,所以他們圖集的 CSV 往往由集圖界中一些資深前輩出頭來做。在這種情況下,往往會出現一個圖集有好幾個版本的 CSV 檔案,並且每個版本之間都有不小的差別。
檔案轉換
打開包含地址數據的 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。