透過 AI 精通 CSV 檔案:結構、使用案例與核心優勢

幾乎您使用的每個系統都可以匯出 CSV 檔案。這就是它得以存續的原因,也是它常以出人意料的方式出錯的原因。
本文將介紹此格式的實際規範、不同實作方式的分歧之處,以及它真正適合用於哪些工作。
關於此格式的一切都源自於 RFC 4180,這是 2005 年 10 月註冊 text/csv 媒體類型的文件。相同的文字也同步鏡像在 IETF datatracker。
CSV 檔案究竟是什麼
CSV 檔案是由紀錄和欄位組成的純文字。它底層沒有活頁簿、沒有格式化層,也沒有公式引擎。
RFC 4180 對於自身的定位異常坦白。它指出「目前不存在正式的規範,這導致對 CSV 檔案有著各式各樣的解讀方式。」
因此,這份文件描述的是慣例而非法律。用它自己的話來說,它制定了「大多數實作似乎都遵循的格式」。
光是這一句話就解釋了大多數 CSV 帶來的痛苦。兩個工具可能都完全合情合理,卻對同一個檔案產生不同的解讀。
規範中的七大規則
RFC 4180 列出了七大規則。它們足夠簡短,值得您牢記在心。
- 「每條紀錄都位於單獨的一行,並以換行符號 (CRLF) 區隔。」
- 「檔案中的最後一條紀錄結尾可以有換行符號,也可以沒有。」
- 第一行可以是選填的標題行,其欄位數量必須與紀錄的欄位數量相同。
- 欄位以逗號分隔,且「整個檔案中每行應包含相同數量的欄位。」
- 欄位可以用雙引號包圍,也可以不用。
- 「包含換行符號 (CRLF)、雙引號和逗號的欄位應使用雙引號包圍。」
- 被引號包圍的欄位內若有雙引號,「必須在前面加上另一個雙引號來進行逸出 (escape)。」
這些規則中的兩個條款所帶來的麻煩,比其他所有條款加起來還要多。
空格也是資料。規則 4 指出「空格被視為欄位的一部分,不應被忽略。」多餘的空格會被視為不同的值。
結尾不得有逗號。同一條規則指出「紀錄中的最後一個欄位後面不得有逗號。」結尾的逗號意味著多出一個空欄位。
為什麼兩個有效的 CSV 檔案仍會產生分歧
規則 5 承認了一個事實,這預示了大多數現實世界中的出錯情況。RFC 4180 指出「某些程式(例如 Microsoft Excel)完全不使用雙引號。」
一旦引號變成選填,規則 7 中的逸出規則也就成了有條件限制的。由一個工具寫入的檔案可能會被另一個工具以不同的方式讀取,而這兩者都沒有錯。
正式的語法顯示了安全的道路有多麼狹窄。該規範的欄位定義僅允許逸出或非逸出的形式,其中逸出形式會將逗號、歸位 (CR) 和換行 (LF) 包裹在雙引號內。
在實務上,這就是為什麼一個包含逗號的客戶名稱會把原本的一列變成兩列。
這種錯誤是悄無聲息的,這也正是其代價高昂的原因。系統不會報錯,您只會得到一個列數比預期還要多的檔案,而且多出來的列看起來還挺合理的。
導致最多出錯狀況的兩個參數
RFC 4180 中的 MIME 註冊完全沒有列出任何必填參數。它只列出了兩個選填參數:charset 和 header。
兩者都是選填的,而且在匯入出錯時,兩者通常都是罪魁禍首。
Charset (字元集)。註冊資訊指出「CSV 的常用用法是 US-ASCII」,同時也允許其他字元集。檔案內部沒有任何資訊宣告使用了哪種字元集,這就是為什麼帶有重音符號的名字和貨幣符號會變成亂碼。
Header (標題)。規則 3 使得標題行成為選填,而註冊資訊表示其存在「應透過選填的 header 參數來指示」。一個單純的檔案不會告訴您第一列是資料還是標籤。
第三個問題根本不在規範中,因為規範對此隻字未提:沒有資料類型。在下游系統做出其他推測之前,每個欄位都只是文字。
適合選擇 CSV 檔案的場景
此格式勝在可攜性,這可不是一件小事。
在毫無關聯的系統之間轉移資料。任何兩個能夠讀取文字的工具都可以交換 CSV 檔案。
封存十年後仍必須開啟的檔案。沒有會過時的專有讀取軟體。
串流與附加。因為每條紀錄都是一行,處理程序可以寫入列而無需重寫整個檔案。
差異比對與版本控制。以行爲單位的文字格式適用於您已在程式碼中使用的工具。
使用 CSV 檔案需要付出的代價
同樣的簡化也移除了您可能依賴的功能。
| 您失去的 | 為什麼這很重要 |
|---|---|
| 資料類型 | 前導零、長 ID 和日期在匯入時會被重新解讀 |
| 多個工作表 | 一個檔案就是一個資料表,因此關聯性必須存在於其他地方 |
| 公式與格式化 | 匯出時只有計算後的值會保留下來 |
| 宣告的編碼 | 檔案內部沒有任何資訊說明其字元集 |
| 宣告的分隔符號 | 以分號分隔的匯出很常見,且仍被稱為 CSV |
這些都不是錯誤。它們是使用不帶任何詮釋資料 (metadata) 的格式所必須付出的代價。任何您需要保留的內容,都必須在檔案本身之外進行記錄。
核心優勢總結
如果您需要一言以蔽之,那就是它了。
CSV 檔案是移動表格資料最可攜、最耐用且最適合串流的方式。它之所以能做到這一點,是因為它除了數值之外什麼都不攜帶。
當接收系統未知或在遙遠的未來時,這種折衷是值得的。但如果類型、關聯性或格式化必須在傳輸過程中保留,這就是一個糟糕的交易。
以定位鍵 (tab) 分隔的近親則是拿一個問題去換另一個問題。我們關於掌握 TSV 檔案的姐妹篇介紹了這種交換在哪些情況下會有所幫助。
使用 AI 處理 CSV 檔案
從「我拿到檔案」到「我得到答案」之間的差距,是耗費最多時間的地方。現在,這個差距在很大程度上可以實現自動化。
Powerdrill Bloom 可以直接接收檔案。其免費方案支援上傳 Excel、CSV、PDF 和文件,並能生成洞察、圖表和摘要。
三個功能頁面涵蓋了常見的工作。CSV AI 助手可處理關於單一檔案的問題。CSV AI 工具涵蓋了更廣泛的功能,而合併 CSV 檔案則能將分別匯出的檔案進行合併。至於TSV 分析頁面則涵蓋了以定位鍵分隔的變體。
用自然語言描述工作可以避免走彎路。您不需要編寫解析器或猜測編碼,只需指定您需要的輸出即可。
方案詳情請見價格頁面,且免費方案已足夠讓您在實際匯出的檔案上進行測試。若要嘗試,請從 Powerdrill Bloom 開始。
常見問題
是否有官方的 CSV 標準?
RFC 4180 註冊了 text/csv 媒體類型並記錄了常見做法。它直接表明當時不存在正式規範,因此請將其視為慣例,而非嚴格的標準。
為什麼我的前導零會消失?
此格式不包含資料類型,因此下游工具會判定像 00123 這樣的值是數字。使用引號包圍並不總是能阻止這種推測。
我該如何處理值內部的逗號?
根據規則 6,將該欄位用雙引號包圍。如果該值也包含雙引號,請根據規則 7,透過重複雙引號來進行逸出。
以分號分隔的檔案仍算 CSV 嗎?
它們被廣泛產出並被通稱為 CSV,但規範中描述的是逗號。在匯入之前請先檢查分隔符號,而不要盲目假設。在文字編輯器中打開前兩行只需幾秒鐘就能確認。
CSV 或 TSV:我應該匯出哪一種?
請根據您的資料進行選擇。在文字值中,定位鍵 (tab) 比逗號更罕見,這減少了使用引號的需要。然而,當檔案透過編輯器進行複製時,定位鍵也更容易遺失。