跳至內容

逗號分隔值

出自Taiwan Tongues 客語維基
於 2025年8月23日 (六) 17:57 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

逗號分隔值(Comma-Separated Values,CSV,有个時節也安到字元分隔值,因為分隔字元也做得毋係逗號), 佢个檔案係用純文个字形式儲存表格資料(數字同文字)。 純文字就表示這隻案仔係一隻字元个序列,毋過定著愛像兩進位數字恁樣分人解讀个資料。CSV 檔案由任意數目个記錄組成,記錄之間用某種換行符分隔;每一條紀錄由欄位組成,欄位間个分隔符係其他字元抑係字串,盡輒看著个係逗號抑係制表符。一般,所有个紀錄都有完全共樣个欄位序列。

CSV 檔案个格式無存在通用標準,也無指定所使用个字元編碼,毋過在 RFC 四千一百八十中有基礎性个描述, 第七 -bit ASCII 係最基本个通用編碼。

用法

CSV 係一種通用个、相對簡單个檔案格式,分使用者、還過商業摎科學廣泛應用。最闊个應用係在程式之間轉移表格資料,這兜程式本身係在無相容个格式頂進行操作个(往往係私有个同 / 還係無規範个格式)。 因為大量程式都支援某種 CSV 變體,盡少係做一個做得選擇个輸入 / 輸出格式。比將講,一個使用者可能需要交換資訊,從一隻用私有格式儲存資料个資料庫程式,到一個資料格式完全無共樣个電子試算表。最可能个情況係,該資料庫程式就做得匯出資料為「CSV」,過仔分人匯出來个 CSV 檔案可以分電子試算表程式來匯入。

「 CSV」毋係一種單一个、定義明確个格式(做你 RFC 四千一百八十有一个分人廣泛使用个定義), 故所在實踐中,術語「CSV」代表具有下列特徵个任何檔案:

一 . 純文字,用某隻字元集,比論講 ASCII、Unicode、EBCDIC 抑係 GB 兩千三百一十二(簡體中文環境)等; 二 . 係由記錄組成(典型个係逐行一條个紀錄); 三 . 逐條記錄分人分隔符係欄位(典型分隔符有逗號、分號抑制表符;有時分隔符做得包括做得選个空格); 四 . 逐條記錄都有共樣个欄位序列。

在這兜常規个約束條件下,存在等盡多 CSV 變體,故所CSV 檔案無完全相容。毋過,這兜差異非常細,還過有當多个應用程式分使用者預覽个檔案(係有可行个,因為佢係純文字), 甚至指定分隔符、跳脫規則這兜。係一個特定 CSV 檔案个差異大,超過了特定接收程式个支援範圍,恁樣形做得个做法通常係人工檢查還過編輯檔案,抑係通過簡單个程式來修復問題。

歷史

逗號分隔值係一種資料格式,列表个方式(「 自由形式」)輸入 /輸出被定義在 FORTRAN 七十七(七十七代表一九七年)中。列表方式个輸入使用吔逗號摎 / 或者係空格分隔符,故所係用來結束引文个字串做毋得包含弄號抑係空格。

相對於固定列寬資料格式,逗號分隔值个列表毋單淨輸入(比論講輸入到打孔卡)還較利便,還過做一隻值分人錯打一列个時節也較無恁該產生毋著个結果。

逗號分隔列(CSL)係一種資料格式,初在最古老个簡單電頭腦裡背分人喊做逗號分隔值(CSV)。 在個人電腦(該央時還較普遍个分人講係「家用電腦」)產業,一個常見个應用係,小企業使用模板還有寄清單生成推銷郵件。

CSL / CSV 分人用來做簡單个資料庫。一兜早期个軟體應用,比論講文書處理器,允准一系列「變數資料」在兩個檔案之間合併:一个係模板檔案,一個係包含名仔、位所還有其他資料欄位个 CSL 資料庫。當多个應用程式還係當多有這種能力。

逗號分隔列過去摎這下都分人用在兩隻無共樣架構个機器之間交換資料庫資訊。純文字个 CSV 檔案大幅度避免了不相容性,比論講位元組順序摎字長。這兜檔案大部分係做得讀个,故所在無有完美个文件或者通訊个情況下還係當簡單處理。

常規功能

CSV 格式最好被用來表現記錄集合或者序列,其中个逐條記錄都有完全共樣个欄位序列。這相當於關聯式資料庫當中一個單一个關係,或者典型个電子試算表中个資料(雖然做毋得計算)。

CSV 格式無分別个特定字元。不管用 Unicode 還係用 ASCII,都無問題(雖然特定程式支援个 CSV 可會有佢兜自家个局限性)。 同大部分个私有資料格式無共樣,CSV 檔案做得對一隻字元集翻譯到另外一隻字元集。毋過,CSV 無提供任何路徑來表明使用个係麼个字元集,故所愛另外通訊,抑係在接收結束个時節指出(係講有可能)。

如前所述,包含當多關係个資料庫做毋得匯出為單一个 CSV 檔案。盡多,淨做得添加還較多个標識約定,比論講標識摎分隔無共樣个關係。這種標識毋會當難設計同實現,毋過係因為無這方面个約定,故所基本無可能移植性。

共樣,CSV 本身做毋得表達分層級个也係物件導向个資料庫抑係其他資料。這係因為每一條 CSV 記錄都應當有共樣个結構。CSV 所以基本政府考試本毋適用於文件,比論講由 HTML、XML 或者其他个標記式語言或者文書處理技術建立个。

欄位會變化个統計資料庫往往有相像關關係个結構,毋過會有兜欄位組係做得重複个。比將講,健康資料庫假使人口摎健康調查,針對一儕分定个爺哀會為每一个細人仔重複一息問題(無定著一个確定个盡大个細人仔數目)。 統計分析系統往往包含做得「旋轉」這類資料个工具:比將講,一條包含五個細人仔資訊个「爺哀」記錄,做得分人分解做五條單獨个紀錄,逐條記錄包含(a)一個細人仔个資訊,摎(b)一份所有無指定細人仔个資訊个拷貝。CSV 做得用「打橫」抑係「豎个」形式來表達這類資料。

在關聯式資料庫當中,這種問題已容易解決—— 為每一個類似个組另外建立一個關係,過使用外來鍵(像係爺哀个身分證號仔抑係名仔)將「細人仔」記錄同相關个「爺哀」記錄連續續起來。在標記式語言如 XML 中, 這類組會分人包含在一隻容器裡肚(比將講,` < child > `), 恁呢按照需要重複該隻容器。對於 CSV,係無分人廣泛接受个單檔案解決方案。

無規範

「 CSV」這個名仔表示係用弄號來分隔資料欄位个。毋過,「 CSV」這個術語還分人廣泛用於形式各異个一系列个格式。比將講,當多所謂个「CSV」檔案實際上使用制表符代替逗號(這種檔案做得還較精確个分人喊做「TSV」,即制表符合分隔值,Tab-Separated Values); 一兜仔實現允准或者係要求使用單引號或者係雙引號來包裹一兜或者全部欄位;還有兜實現保留最頭前个一條記錄作為表頭來包含欄位名序列。

其他的實現差別包括愛仰般處理過較多輒常看著个欄位分隔符(比論講空格抑係分號)摎在文字欄位中个換行符。還過微妙个係對一個空行个翻譯:寫一條零欄位个紀錄,抑係一條有一個零長度欄位个記錄共樣做得得著恁樣个結果;故所對佢个解碼係有歧義个—— 這種無共樣个意思一般來傷大雅。

RFC 四千一百八十所記載个標準做得使 CSV 交換簡單化。毋過,這標準呢淨指定吔對文字个欄位个處理。對各隻欄位个文字个翻譯還係由參照程式指定个。當特別个,並無標準來指定仰般表示小數,雖然佢兜普遍分大家嵌入在 CSV 資料中,還過一兜國家使用點準做係小數分隔符,一兜國家用弄號。比將講,法文CSV 檔案可能同圓周率个近似值寫為三 , 一千九百二十九日。

一個通用个(係講技術上無分人試著當滿意)互操作性解決方案係依賴人工介入:因為 CSV 檔案係純文字,使用者做得通過使用文字編輯器預覽還過診斷絕大部分(係無全部)問題。恁樣做个例仔包括 Microsoft Access 等(關係)資料庫个產品,在該匯入 CSV / TSV 這種資料時就做得分使用者一片預覽一片調表現到當好、分隔符之類个選項。

進行中个標準化

「 CSV」格式當中大量變體个存在說明並無一個「CSV 標準」。 在常見用法當中,做得講係任何定界符分隔个文字資料都做得分大家安到「 CSV」檔案。無共樣个 CSV 格式可能毋會相容。

毋過,RFC 四千一百八十係一個將 CSV 正式化个努力。佢定義了網路媒體類型「text / csv」,還過摘用厥个規則e55 CSV 檔案會有當多个可移植性。佢有像下要求:

  • 以(CR / LF)字元結束个 DOS 風格个行(最後一行做得選)。
  • 一條做得選个表頭記錄(無靠得个方式來檢測佢係毋係有存在,故所匯入去个時節一定愛當細義)。
  • 逐條記錄「該當」包含共樣數量个逗號分隔欄位。
  • 麼个欄位都 _ 做得 _ 分人包裹(用雙引號)。
  • 包含換行符、雙引號摎 / 抑係弄號个欄位 _ 該當 _ 分人包裹。(啊無,檔案仔可能做毋得分人正確來處理)。
  • 欄位中个一隻(雙)引號字元必須愛分人表示為兩隻(雙)引號字元。

這個格式盡簡單,做得分大部分聲稱做得讀取 CSV 檔案个程式來處理。例外係(a)程式做得分人包裹个欄位換行,(b)程式做得選个表頭當做資料,或者將第一個資料行當做可選个表頭。

技術背景

這隻格式做得講到早期个商用電腦,佢分人當多使在電腦之間个傳遞資料,這兜電腦可能會有無共樣仔內在字長,需要無共个資料格式,等一下。所以,CSV 檔案在所有个電腦平台上通用。

CSV 係一種分隔个文字檔案,佢用弄號來分割值(當多 CSV 匯入 /匯出工具个實現也做得許使用其他个分隔符)。 簡單个 CSV 實現做得禁止欄位值當中包含逗號抑係其他特殊字元假使換行符。過較複雜个 CSV 實現允准這兜特殊字元,佢兜向要求用 "(雙引號)包裹這兜包含保留字元(係弄號、雙引號抑無麼个通用个換符)个數值。分人嵌入个雙引號字元使得用連續兩個雙引號來表示(Creativyst 二千空十一十), 或者使用跳脫字元如反斜槓(比將講在 Sybase Central 中)。

在電腦科學術語當中,CSV 檔案做得分人認為係一個「平面檔案資料庫」。

基本規則摎比例

係存在當多係描寫「CSV」格式个非正式檔案。IETFRFC 四千一百八十(比將講嗬)定義吔格式「text / csv」網際網路媒體類型,還過已經註冊在 IANA。(Shafranovich 二千空五)另外一隻相關規範由有欄位文字提供。Creativyst ( 二千空十一十 ) 提供吔一個概述,說明了在最廣泛使用个應用程式當中所使用个變體,還過解釋了 CSV 仰仔正做得盡好个分人使用摎支援。

這兜摎其他「CSV」規範摎實現个典型規則像係下:*CSV係一種分隔个資料格式,佢有分人逗號字元分隔个欄位 / 列仔同以換行結束个紀錄 / 行。

  • CSV 檔案毋好要求特定个字元編碼、位元組序抑係行結束符格式(有兜仔啦軟體毋支援所有行結束變體)。
  • 一條記錄結束在行結束符。毋過,行結束符可能分資料嵌入到欄位裡背,故所軟體愛辨識被包裹个行結束符(見下述), 利便對可能个多行當中正確組裝一條完整个記錄。
  • 所有个紀錄應該有共樣个數目、共樣順序个欄位。
  • 欄位中个資料分人翻譯做一系列字元,還毋係一系列位元抑係位元組(見 RFC 二千空四十六,section 四圍一千擔)。 比將講,數量六五千五百三十五做得分人表現為五個 ASCII 字元「六齣五千五百三十五」(抑係其他形式像「零 xFFFF」、「 六齣五千五百三十五千空零零 E + 零」等一下); 毋過毋會分人作為單隻兩隻來整數个兩位元組序列(毋係兩隻字元)來處理。係講無遵守這「純文字」个慣例,恁仔該 CSV 檔案就做毋得包含有當足个資訊來正確个翻譯佢,該 CSV 檔案可能會無共樣个電腦架構間正確傳達,還過做毋得摎 _ text / csv _ MIME 類型保持共樣。
  • 相鄰欄位定著愛分單個弄號分隔開。毋過,「 CSV」格式在分隔字元个選擇上變化盡大。特別係在有兜區域設定當中逗號分人用來做小數點,斯會使用分號、制表符或者係其他字元來代替。

` ` ` 一千九百九十七 , Ford , E 三百五十 ` ` `

  • 麼个欄位都 _ 做得 _ 分人 _ 包裹 _(使用雙引號字元)。 有兜欄位 _ 定著 _ 分人包裹,詳細个規則。

`` ` " 一千九百九十七 " , " Ford " , " E 三百五十 " ` ` `

  • 係講欄位包含分嵌入个逗號,愛分人包裹。

` ` ` 一千九百九十七 , Ford , E 三百五十 , " Super , luxurious truck " ` ` `

  • 逐隻分人嵌入个雙引號字元定著愛分人表示為兩隻雙引號字元。

` ` ` 一千九百九十七 , Ford , E 三百五十 , " Super , " " luxurious " " truck " ` ``

  • 假使欄位在包含被嵌入个換行,愛分人包裹(毋過,當多簡單个 CSV 實現毋支援欄位內換行)。

` ` ` 一千九百九十七 , Ford , E 三百五十 , " Go get one now theyare going fast " ` ` `

  • 在有兜欸 CSV 實現中,起頭同結尾个空格同制表符分人截忒。_ 這一實踐係有爭議个,也無符合 RFC 四千一百八十。RFC 四千一百八十聲明「空格分看做欄位个一部分,愛細義哦。」_。

` ` ` 一千九百九十七 , Ford , E 三百五十 not same as 一千九百九十七 , Ford , E 三百五十 ` ` `

  • 毋過,該 RFC 並無有講係空白字个銀出現在分人包裹个值以外愛仰仔處理。

` ` ` 一千九百九十七 , " Ford " , E 三百五十 ` ` `

  • 在截忒起頭同結尾空格个 CSV 實現中,摎這種空格看做有意義資料个欄位愛分人包裹。

` ` ` 一千九百九十七 , Ford , E 三百五十 , " Super luxurious truck " ` ` `

  • 第一條記錄做得係「表頭」,佢在每一个欄位當中包含列名(並無可靠途徑來摎你講一個檔案係毋係恁樣包含表頭;毋過,一般在列名當中單淨用字母、數字同底線,毋用其他个字元)。

` ` ` Year , Make , Model 一千九百九十七 , Ford , E 三百五十 兩千, Mercury , Cougar ` ` `

舉例

以上个資料表做得 CSV 格式表示:

` ` ` Year , Make , Model , Description , Price一千九百九十七 , Ford , E 三百五十 , " ac , abs , moon " , 三千八百空零 一千九百九十九 , Chevy , " Venture " " Extended Edition " " " , " " , 四千九百 .零 一千九百九十九 , Chevy , " Venture " " Extended Edition , Very Large " " " , , 五千八百空零 一千九百九十六 , Jeep , Grand Cherokee, " MUST SELL ! air , moon roof , loaded " , 四千七百九十九十九pa24零零 ` ` `

美國 / 英國个 CSV 檔案(小數點係點,值分隔符係逗號)舉例:

` ` ` Year , Make , Model , Length 一千九百九十七 , Ford , E 三百五十 , 二章三四 兩千 , Mercury , Cougar , 二章三八 ` ` `

德國摎荷蘭共樣个 CSV / DSV 檔案(小數點係逗號,值分隔符係分號)舉例:

` ` ` Year ; Make ; Model ; Length 一千九百九十七 ; Ford ; E 三百五十 ; 二 , 三十四 兩千 ; Mercury ; Cougar ; 二, 三十八 ` ` `

後者个格式係無遵守 RFC 四千一百八十个。係講愛分佢遵守,做得使用逗號代替分號做為分隔符,或者使用小數點表示法个國際符號,或者包含小數點个數目字。

應用程式支援

CSV 檔案格式非常簡單,分幾下乎所有个電子試算表摎資料庫管理系統支援。當多程式語言都有做得利用个庫來支援 CSV 檔案。當多實現都支援變換欄位分隔字元摎一息仔包裹約定以最大化接收者處理資料个機會,雖然使用最簡單个約定係最安全个。

Microsoft Excel 會打開來 . csv 檔案,毋過依賴系統个地區來設定,佢做得使用分號做為分隔符來代替逗號,這係因為佢兜語言當中逗號分人用來做小數點。還過,Excel 个當多地區版本做毋得在 CSV 中處理 Unicode。係堵著這種困難个時節,一個簡單个解決方案係將副檔名從 ` . csv ` 變做 `. txt `;過吔對一個已經做好个 Excel 中用「打開來」命令打開檔案。

係講貼文字資料到 Excel 中時,通常制表符合分人用來做分隔符:係講你做得複製「hello < tab > goodbye」到剪貼簿裡背還過同佢貼上到 Excel 中,佢會進入到兩个儲存格當中。「hello , goodbye」貼上進 Excel 會進入一个儲存格當中,包括弄號。係你在 Excel 當中使用「文字到列」功能同時改變設定,佢共樣係貼上進文字資料改變設定。

OpenOffice . org Calc 摎 LibreOffice Calc 處理 CSV 檔案,還過通過一個 _ 文字匯入來 _ 對話方塊貼上文字,對話方塊要求使用者自家指定分隔符、編碼、列格式這兜。

在類 Unix 系統上,有盡多工具程式盡少做得處理一兜 CSV 檔案。當多這類工具有法度改變分隔字元,毋過係當少做得支援任何其他个變體(抑係 Unicode)。 這兜可用个程式有:

  • column
  • cut
  • paste
  • join
  • sort
  • uniq(-f 來跳過較前 N個欄位)

參見

  • 資料序列化格式比較
  • CSV 應用程式支援
  • 定界符合分隔值
  • 含欄位文字
  • 制表符分隔值

註釋

參考資料

外部連結

  • B 二 B(商業對商業)應用个 CSV 176一千兩百空三檔案个格式規範(英文)
  • 仰仔啊:逗號分隔值(CSV)檔案格式(英文)
  • RFC 四千一百八十:CSV 檔案格式个 RFC規範(英文)