複製鏈接
請複製以下鏈接發送給好友

CSV

(逗號分隔值文件格式)

鎖定
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。建議使用WORDPAD或是記事本來開啓,再則先另存新檔後用EXCEL開啓,也是方法之一。
CSV文件格式的通用標準並不存在,但是在RFC 4180中有基礎性的描述。使用的字符編碼同樣沒有被指定,但是bitASCII是最基本的通用編碼。
中文名
CSV
外文名
Comma-Separated Values
應    用
在程序之間轉移表格數據

CSV用法

CSV是一種通用的、相對簡單的文件格式,被用户、商業和科學廣泛應用。最廣泛的應用是在程序之間轉移表格數據,而這些程序本身是在不兼容的格式上進行操作的(往往是私有的和/或無規範的格式)。因為大量程序都支持某種CSV變體,至少是作為一種可選擇的輸入/輸出格式。 [1] 
例如,一個用户可能需要交換信息,從一個以私有格式存儲數據的數據庫程序,到一個數據格式完全不同的電子表格。最可能的情況是,該數據庫程序可以導出數據為“CSV”,然後被導出的CSV文件可以被電子表格程序導入。
“CSV”並不是一種單一的、定義明確的格式(儘管RFC 4180有一個被通常使用的定義)。因此在實踐中,術語“CSV”泛指具有以下特徵的任何文件:
  1. 純文本,使用某個字符集,比如ASCIIUnicodeEBCDICGB2312
  2. 由記錄組成(典型的是每行一條記錄);
  3. 每條記錄被分隔符分隔為字段(典型分隔符有逗號、分號或製表符;有時分隔符可以包括可選的空格);
  4. 每條記錄都有同樣的字段序列。
在這些常規的約束條件下,存在着許多CSV變體,故CSV文件並不完全互通。然而,這些變異非常小,並且有許多應用程序允許用户預覽文件(這是可行的,因為它是純文本),然後指定分隔符、轉義規則等。如果一個特定CSV文件的變異過大,超出了特定接收程序的支持範圍,那麼可行的做法往往是人工檢查並編輯文件,或通過簡單的程序來修復問題。因此在實踐中,CSV文件還是非常方便的。

CSV規則

1 開頭是不留空,以行為單位。
2 可含或不含列名,含列名則居文件第一行。
3 一行數據不跨行,無空行。
4 以半角逗號(即,)作分隔符,列為空也要表達其存在。
5列內容如存在半角引號(即"),替換成半角雙引號("")轉義,即用半角引號(即"")將該字段值包含起來。
6文件讀寫時引號,逗號操作規則互逆。
7內碼格式不限,可為 ASCII、Unicode 或者其他。
8不支持數字
9不支持特殊字符

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 值認為是註釋的。

CSV規範

逗號分隔列出日期之前,儘早從個人電腦,但被廣泛應用於最早前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的要求.
  • 元素中的換行符將被保留下來.

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。
參考資料