CSV 文件格式

CSV 文件格式

描述

逗號分隔值(Comma-Separated Values,CSV,有時成為字符分隔值)。

其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本),文件的每一行都是一個數(shù)據(jù)記錄。

每個記錄由一個或多個字段組成,用逗號分隔。使用逗號作為字段分隔符是此文件格式的名稱的來源,因為分隔字符也可以不是逗號,有時也稱為字符分隔值。

CSV 廣泛用于不同體系結(jié)構(gòu)的應(yīng)用程序之間交換數(shù)據(jù)表格信息,解決不兼容數(shù)據(jù)格式的互通問題。一般按照傳輸雙方既定標(biāo)準(zhǔn)進(jìn)行格式定義,而其本身并無明確格式標(biāo)準(zhǔn)。

特征

  • 文件采用純文本存儲,需要使用某個字符集(ASCII、Unicode、UTF-8等)
  • 數(shù)據(jù)由記錄組成(一般是每一行一條記錄)
  • 每條記錄被分隔符分為一個個字段(常用的分隔符有 ',','\t',' '';'等)
  • 每條記錄都有同樣的字段序列

優(yōu)點

由于 CSV 文件格式的特性。

CSV 格式的文件可以用 Excel 和 WPS 等表格工具以表格的形式打開,便于查看和編輯。

缺點

由于 CSV 文件格式?jīng)]有嚴(yán)格的標(biāo)準(zhǔn)(實際上可以認(rèn)為沒有標(biāo)準(zhǔn)),會造成使用不同的工具打開時會有不同程度的亂碼問題。

(你本地的 Excel 和 WPS 打開同一個 CSV 文件,往往顯示的情況會不一樣。甚至同一個 Excel 軟件的不同版本,也會顯示不一樣的結(jié)果)

所以進(jìn)行一些約定很重要。

CSV 文件解析的關(guān)鍵點

字符集:由于文件是采用純文本存儲的,不同字符集對每個字符的存儲方式不一樣。需要統(tǒng)一采用一個字符集才能很好的進(jìn)行兼容。(關(guān)于常用的 ASCII、Unicode、UTF-8 字符集可以看一下這個ASCII、Unicode、UTF-8

分隔符:一般常用的是 ','(逗號分隔符)。但是有些 CSV 文件需要存儲文章句子信息等,這些信息 ',' 符是常用字符,容易造成解析出錯或者解析方法復(fù)雜??梢赃x用 '^' / '\t' 等不常用的字符作為分隔符。應(yīng)用途而異,具體問題具體分析。

記錄分隔:一般來說以一行為一條記錄,那么記錄與記錄之間就是常用"換行符"進(jìn)行分隔的?這里就需要看一下附錄:回車符 CR 與換行符 LF 的行末結(jié)束符之爭。

空字段:我們常使用 CSV 文件當(dāng)做表格來處理,那么表格顯然存儲某些字段為空的情況。這種情況下需要注意保留兩個分隔符,表示一段空字段。

Excel 和 WPS 建議格式

Warning:個人測試結(jié)果,有問題不要打我?。。。y免有版本問題)

Warning:個人測試結(jié)果,有問題不要打我?。。。y免有版本問題)

Warning:個人測試結(jié)果,有問題不要打我?。。。y免有版本問題)

由于經(jīng)常使用的文字包含 英文 和 簡體中文,需要考慮一個合適的字符集:

信息 建議設(shè)置
字符集 Unicode
分隔符 ','(逗號分隔符)
記錄分隔 這兩個軟件基本上是在 Windows 上使用的,那么需要采用 CRLF("\r\n") 作為行末分隔符
其它 如果存儲在字段里有 ',' 符號,需要用 '"' 包含字段。如:`姓名 年齡,性別 地址,CSV 的記錄為:姓名,"年齡,性別",,地址CRLF`

基本上滿足以上要求的,可以完美的用 Excel 和 WPS 打開查看和編輯和。

附錄:回車符 CR 與換行符 LF 的行末結(jié)束符之爭

在計算機出現(xiàn)之前,人們常用電傳打字機(Teletype Model 33)打印字符,它每秒可以打印 10 個字符(0.1 秒 / 字符)。

但在打印完一行后,準(zhǔn)備換行時發(fā)現(xiàn)換行需要用去 0.2 秒。

而這 0.2 秒正好可以打印兩個字符。

如果這 0.2 秒內(nèi)有新的字符傳過來,那么傳過來的字符將會丟失(因為它正在換行,無法進(jìn)行打印作業(yè))。

電傳打字機的研發(fā)人員為了解決此問題,決定在每行后面添加兩個表示接受的字符:CR、LF

CR(Carriage Return,回車符):告訴打字機把打印頭重定位在該行的左邊界

LF(Line Feed,換行符):告訴打字機把打印頭下移一行,即把紙向下移一行


隨著計算機的出現(xiàn),這種處理機制被移到計算機上。

但是早期計算機容量很小(存儲器很貴),有人認(rèn)為每行結(jié)尾加 2 個字符太浪費了,應(yīng)該加 1 個字符就行。

從此出現(xiàn) 行末結(jié)束符 之爭:

換行符('\n',LF,Line Feed)
回車符('\r',CR,Carriage Return)

系統(tǒng) 行末結(jié)束符 ASCII 表示 結(jié)束符字符數(shù)
Windows,DOS CRLF "\r\n" 2
Linux,UNIX LF "\n" 1
Mac CR "\r" 1

這種分歧導(dǎo)致:

Windows 打開 Linux 的文件,所有的文字都會變成一行(因為 Windows 認(rèn)為 CRLF 才表示換行)

而 Linux 打開windows 文件,每一行結(jié)尾會多出一個 ^M 符號

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容