最後一次花費我一個下午的 CSV 是從客戶端匯出的 40 MB's WooCommerce 商店。我雙擊了它,Excel 決定 SKU 欄是一個日期,並且 2024-11-3 突然就變成了以前的樣子 2024-11-3-只不過是't,它是一個產品代碼。 Excel 有助於重寫它。當我們注意到時,"cleaned"文件已經重新導入,數百個產品的 SKU 沒有任何指示。
這是在電子表格應用程式中開啟 CSV 的問題。電子表格不是檢視器,它'是一個有意見的編輯器。它強制輸入,從郵遞區號和電話號碼中剝離前導零,它重新解釋任何看起來模糊像日期的東西,並且在您查看一行之前它完成了所有這些。有時你只是想這麼做 看 文件 - 檢查列名,確認行數,找到破壞導入的記錄,然後退出。
我建造 工具。dev 我讀了其他人的書' CSV 不斷匯出 - 條紋支出、資料庫轉儲、分析摘錄、插件遷移檔案。所以我建造了 CSV 檢視器 成為一個無聊、誠實的選擇:它解析文件,準確地向您顯示其中的內容,並且不會更改任何內容。無類型強制,無自動更正,無上傳。貼上文字或丟棄文件,它會呈現為表格,您可以搜尋和排序。
TL;DR: CSV 檢視器解析分隔的文字並將其呈現為表格,而無需編輯或強制值。這 CSV 檢視器 自動偵測您的檔案是否使用逗號、分號、製表符或管道、句柄 RFC 4180 引用欄位(儲存格內的逗號和換行符、雙引號),警告您有關參差不齊的行和重複標頭的信息,並匯出到標準化 CSV 或 JSON。所有內容都在您的瀏覽器中運行 - 文件永遠不會上傳,並且值保留字串,因此前導零仍然存在。
什麼是 CSV 檔案?
CSV 代表逗號分隔的值,該名稱導致了十年的錯誤,因為這三個單字中有兩個不可靠。
這些值並不總是用逗號分隔。使用逗號作為小數點分隔符號的場所(歐洲大陸的大部分地區)使用分號進行匯出,因為 1,50;2,75 是明確的和 1,50,2,75 不是。 Excel 在德國或法國區域設定中預設會執行此操作。分析和資料庫匯出通常使用選項卡,日誌管道經常使用管道。其中任何一個通俗地仍然是 "CSV"。
這些值並不總是簡單的。當一個值包含分隔符號時,該格式需要一個轉義孵化器,RFC 4180 提供了一個:將欄位包裝成雙引號。在這些引號內部,分隔符號只是一個字元。引號字元本身可以透過加倍來轉義。引用的欄位可能包含文字換行符,這意味著單一邏輯記錄可以跨越檔案中的多個實體行。
最後一點是樸素解析器死亡的地方。如果你的程式碼是 line.split(',')- 我已經寫了那一行,你也寫了 - 那麼這個文件就會毀掉它:
id,name,note
1,"Smith, John","He said ""hi""
on the second line"
2,Ada,plain
三列,兩筆記錄。逗號分割解析器看到第二行中的四個字段,對雜散引號感到恐慌,並將包裝線視為第三筆記錄。正確的解析器逐個字元地遍歷字串字符,追蹤它目前是否位於引號內,並準確地產生文件的含義。 CSV 檢視器執行第二件事。
CSV 檢視器的主要功能
自動分隔符號檢測
貼上文件,工具在做其他任何事情之前猜測分隔符號。天真的方法是計算字元並選擇最常見的一個,這在散文中立即失敗 - a notes 充滿英文句子的欄位包含的逗號遠多於分號分隔的檔案的分號。
所以檢測得分 一致性 而不是頻率。它採用前十行非空行,對引用部分之外的每個候選分隔符號(逗號、分號、製表符、管道)進行計數,並獎勵在每行產生相同計數的候選分隔符號。真實的分隔符號恰好出現 columns - 1 每行、每一行的次數。散文中的逗號不規則地出現。一致性獲勝,頻率僅打破平局。如果它仍然猜錯 - 並且在一列的文件上它會猜錯 - 您可以從下拉式覆蓋它。
RFC 4180 引用了欄位解析
解析器是字元級狀態機,不是正規表示式,也不是分割。它追蹤一個布林值:我們在引用的欄位內嗎?在引號內,分隔符號和換行符是普通字符,並且是雙數 "" 發出一個文字引用。在引號之外,分隔符號結束字段,換行符結束記錄。 CRLF、LF 和裸 CR 行結尾都被接受,因為 Windows 匯出、Unix 匯出和舊 Mac 匯出都存在,並且最終都出現在同一收件匣中。
這就是向您展示的觀眾之間的差異 Smith, John 在一個單元格和一個顯示您的單元格中 "Smith 和 John" 在兩個。
搜尋每一列
搜尋框過濾行,其中不區分大小寫的子字串與該行中的每個儲存格相符。它不是模糊的,它不是查詢語言,這是故意的 - 當您尋找破壞導入的記錄時,您有一個訂單 ID 或電子郵件地址,並且您想要包含它的行,立即。
搜尋在記憶體中解析的資料上運行,因此它可以即時出現在瀏覽器可以保存的任何大小的檔案上,並且它包含排序:首先過濾,對結果進行排序,匯出剩餘的內容。
數字感知列排序
點擊列標題對其進行排序。這聽起來很瑣碎,但事實並非如此,因為 CSV 沒有類型 - 每個值都以字串形式到達,並且字串排序放置 100 之前 9 和 2024-3-1 之前 2024-11-1.
此排序檢查值:如果比較中的每個非空單元格解析為一個數字(剝離了數千個分隔符號),則它會進行數字比較。否則,它會回退到具有數字校對的區域設定感知字串比較,因此 item2 之前排序 item10. 空單元格總是向兩個方向沉入底部,因為空白不是一個小值 - 它是一個缺失的值,而將缺失的資料埋在降序排序的頂部就是您沒有註意到它的原因。
數據品質警告
在你進一步討論之前,兩個結構性問題會被標記出來。
破爛的行。 如果一行的欄位比標頭多或更少,則上游會出現問題:值內有一個未引用的分隔符號、一個截斷的匯出、一條雜散的換行符。檢視器會填充短行並截斷長行,以便表格仍然渲染,然後準確地告訴您到底有多少行受到影響。該計數是我首先檢查的數字,因為一萬行中有三行的檔案存在資料錯誤 COPY 進入 Postgres 將於凌晨 3 點浮出水面。
重複的列名稱。 兩列稱為 id 幾乎每個下游消費者都會默默地互相覆蓋 - pandas 將重新命名它們,JSON 轉換將僅保留最後一個,SQL 導入將出現錯誤。檢視器在警告橫幅中命名它們,以便您可以在重要之前修復標頭。
CSV 和 JSON 匯出
匯出面板會重新序列目前螢幕上的任何內容 - 過濾、排序,無論您執行什麼操作。 CSV 匯出在退出時應用正確的 RFC 4180 引用,這使其成為標準化引用不一致到達的檔案的體面方法。 JSON 匯出將表格轉換為由標頭行鍵控的物件數組,這就是您在提供腳本或 API 時想要的。
一個深思熟慮的選擇: 導出的值保持字串。 "01234" 不會變成 1234. 充滿數字的 CSV 列可能是一個數量,也可能是郵遞區號、帳號、電話號碼或 SKU - 並且無法區分資料。強制數字會永久丟棄前導零,這正是本文開始的錯誤。如果您想要數字,請將它們明確地投射到另一側,您知道該列的含義。
它完全在您的瀏覽器中運行
該文件與 一起閱讀 FileReader API 並在 JavaScript 中解析。沒有上傳任何內容,沒有記錄搜尋查詢,沒有資料接觸伺服器。這不是策略承諾,而是可以透過開啟 DevTools' 來驗證架構事實;使用工具時,或拉動 Wi-Fi 並觀看其繼續工作,即可建立網路標籤。
這比聽起來更重要。大多數值得一看的 CSV 檔案都包含一些你不會貼到陌生人身上的內容'網站:客戶電子郵件、薪資資料、訂單歷史記錄、從生產資料庫匯出。如果您在 GDPR、HIPAA 或客戶 NDA 下工作,"我將其貼到線上轉換器和報價中;這不是您想大聲說出的句子。我在其中寫了更多關於該威脅模型的內容 為什麼客戶端工具擊敗了雲端轉換器.
如何使用 CSV 檢視器
第 1 步:載入檔案
有兩種方式。將 CSV 文字直接貼到輸入框中 - 適合您想要查看的日誌、Slack 訊息或 API 回應的片段。或點擊 上傳文件 並選擇一個 .csv, .tsv,或者 .txt 來自您的機器的文件。該文件在本地讀取;上傳按鈕是一個文件 採摘者,不是上傳。
如果您要貼上電子表格,請注意,大多數電子表格應用程式都會在剪貼簿上貼上選項卡分隔的文本,而不是逗號。將分隔符號設為 Tab,或將其保留在 Auto 上並讓偵測處理它。
第 2 步:檢查解析設定
三種設置,預設值大多時候都是正確的。
分隔符號 預設是自動的。如果您的檔案有一列,或者偵測對小樣本猜錯了,請覆蓋它。
第一行是標題 正在開啟。關閉無頭文件 - 列變為 Column 1, Column 2,等等,沒有消耗行。
修剪空白 在上,它從每個單元格中剝離前導和後導空間。這通常是你想要的,因為 , 在手寫 CSV 中,分隔符號之後非常常見。如果您的資料具有有意義的前導空間(例如轉儲到 CSV 的固定寬度欄位),請將其關閉。
第三步:閱讀表格
擊 查看為表格 您將獲得解析的網格加上一條統計線:總共有多少行中可見多少行、有多少列、使用了哪個分隔符號以及有多少列是完全數字的。該數字計數是一種快速的理智檢查 - 如果您期望為數字的列未被計數,則其中的某些行包含非數字,並且通常是該行會破壞您的導入。
搜尋過濾器行。點擊標題排序。兩人組成。
第 4 步:匯出或繼續
將可見表複製為 JSON,下載為 CSV,或下載為 JSON。過濾器和排序應用於導出,所以"搜尋 refunded,按日期排序,下載CSV"恰好給你那個子集。
與其他開啟 CSV 的方式相比,這是如何進行的?
| 方法 | 強制您的資料 | 處理引用的欄位 | 離線工作 | 向任何地方發送資料 | 好 |
|---|---|---|---|---|---|
| CSV 檢視器(toolz。dev) | 不 | 是的(RFC 4180) | 是的 | 不 | 檢查、搜尋、健全性檢查、轉換為 JSON |
| Excel/Google 表 | 是的 - 日期、前導零、科學記數法 | 是的 | Excel 是,表號 | 表上傳到 Google | 編輯、公式、圖表 |
| 文字編輯器 | 不 | 不--你把它解析在你的腦海裡 | 是的 | 不 | 小文件,檢查行尾 |
csvkit / xsv /DuckDB CLI |
不 | 是的 | 是的 | 不 | 巨大的文件、腳本、連接、聚合 |
大熊貓 read_csv |
是的,預設情況下(dtype=str 為了阻止它) |
是的 | 是的 | 不 | 分析、改造管道 |
| 大多數&引用;線上 CSV 檢視器和引用;網站 | 變化 | 通常 | 不 | 是的 - 已上傳到他們的伺服器 | 你什麼都不關心 |
誠實的摘要:對於幾百兆位元組的文件,請使用 DuckDB 或 xsv- 瀏覽器一次將整個檔案解析到記憶體中,但無法解決這個問題。對於任何您需要使用公式編輯的內容,請使用電子表格並接受強制,或匯入為文字。對於介於兩者之間的所有內容 - 每日 & 引用;該文件中的實際內容,以及為什麼第 4,201 行中斷引用; - 不做任何改變的檢視器是正確的工具。
常用案例
調試失敗的導入
CSV 匯入失敗"預計 8 列,第 4201 行有 9 列"。在檢視器中開啟文件,檢查破爛行警告,然後搜尋您知道該記錄中的值。十分之九您會在地址或公司名稱中找到未引用的逗號 - Acme, Inc. 寫時沒有引號。現在您知道是修復匯出還是預處理文件。
在資料庫匯出到達任何地方之前對其進行檢查
在客戶端's 資料離開您的筆記型電腦之前,您想知道其中有什麼。列名、行數、是否 email 列已完全填入,無論是否有重複的 ID。統計行和填入的列/唯一計數將在大約十秒內回答所有這些,而檔案永遠不會到達伺服器。
將 CSV 轉換為 JSON 以取得 API 或腳本
您有一個記錄電子表格,您需要它們作為 JSON 來播種資料庫、饋送 REST 端點或建立固定文件。貼上、解析、匯出 JSON。如果您需要反向行程,則 csv 到 json 和 json 到 csv 工具可以處理具有更多選項的專用轉換,我在 中詳細討論了往返問題 JSON 到 CSV 轉換指南.
檢查以一欄形式開啟的歐洲出口
客戶端從德國 Excel 安裝發送匯出,每一行都是一長串。將分隔符號設為分號,它會卡入列。這需要四秒鐘,值得了解,因為反射&引用;文件已損壞&引用;錯了 - 文件很好,你的解析器'假設不是。
審計分析或廣告平台匯出
GA4、Google Ads 和 Meta 匯出以 CSV 形式到達,元資料行位於實際標頭上方。關閉並引用;第一行是標題&引用;,查看形狀,您將準確地看到真實標頭位於哪一行 - 然後從貼上框中刪除垃圾行並重新解析。
技術深度潛水:真正重要的解析規則
RFC 4180 是一種描述,而不是任何人強制執行的標準。 它於 2005 年發布,記錄了 CSV 實作已經完成的工作,並明確指出許多實作有所不同。將其視為理智的基線,而不是作為您發送的文件的保證。
引用規則。 欄位可以用雙引號括起來。引號、分隔符號、CR、LF 和雙引號內部 ("" → ") 是字面意思。出現在未引用欄位中間的引用是不明確的 - 只有當引用是該欄位的第一個字元時,檢視器才會將引用視為重要,這是大多數真實解析器的行為方式,並允許值類似 6" nails 生存。
行結尾。 CRLF 就是規格所說的。 LF 是 Unix 產生的。裸CR是非常舊的Mac軟體產生的,以及一些嵌入式系統仍然產生的。解析器接受所有三個,包括一個檔案中的混合結尾,因為當檔案在兩台電腦上編輯時,絕對會發生混合結尾。
物料清單。 Excel 編寫的 UTF-8 檔案以位元組順序標記開頭 EF BB BF。 如果您的第一個列名稱如下所示 id 但字串比較 "id" 失敗了,那個看不見的 BOM 騎在它的前面。這是最常見的"為什麼我的標頭查找失敗" CSV 處理中的錯誤。
尾隨換行符。 以換行符結尾的檔案沒有額外的空記錄 - 換行符終止最後一筆記錄。檢視器's 跳過空行選項使這無論如何都不是問題。
類型推理。 有'任何。 CSV 沒有類型。檔案中的每個值都是一個字串,而你從另一邊得到的任何類型都是解析器根據猜測發明的。這不是格式上的缺陷,而是格式'整個性質 - 這就是為什麼觀眾永遠不會代表你猜測。
問號
如何在沒有 Excel 的情況下開啟 CSV 檔案?
將文件上傳到 CSV 檢視器 或將其內容貼到輸入框中。該文件在您的瀏覽器中解析並顯示為表格,您可以搜尋和排序。沒有電子表格軟體,沒有安裝,也沒有上傳到伺服器。
為什麼我的 CSV 以一長列開啟?
分隔符號不匹配。 在使用逗號作為十進位分隔符的語言環境中導出的文件通常使用欄位之間的分號,而分頁的匯出使用選項卡。 將分隔符設定從自動切換到分號、標籤或管道,列將正確分割。
檢視器是否在引用的欄位中處理逗號?
是的。解析器遵循 RFC 4180:雙引號包覆的欄位可以包含分隔符號、換行符和寫成連續兩個雙引號的轉義引號。像這樣的值 "Smith, John" 待在一個牢房裡,而不是分成兩個牢房。
CSV 和 TSV 有什麼不同?
他們使用不同的欄位分隔符號 - CSV 用逗號分隔,TSV 用製表符分隔。 TSV 需要較少的引用,因為製表符很少出現在資料值內,這就是為什麼資料庫和分析匯出通常更喜歡它。此檢視器會讀取兩者;選擇 Tab 作為 TSV 檔案的分隔符號。
"ragged rows" 是什麼意思?警告的意思?
一行的欄位比標題行多或少。 它通常意味著值內的未引用分隔符號、截斷導出或包含雜散線中斷的欄位。 檢視器會填充短行並截斷長行,因此表格仍然會渲染,並告訴您有多少行受到影響。
有檔案大小限制嗎?
實際限制是您的瀏覽器記憶體,因為整個檔案都解析為單一 JavaScript 密碼。 在典型的筆記型電腦上,高達數十兆位元組的檔案可以。 對於多千兆位元組的匯出,請使用 CSVKit、DuckDB 或 Pandas 等串流工具,改為使用 ChunkSize。
我可以將 CSV 轉換為 JSON 嗎?
是的。匯出面板將解析的表格轉換為由標頭行鍵控的 JSON 物件數組,您可以複製或下載該數組。值在設計上保持為字串 - 將它們強制轉換為數字將從 ID、郵遞區號和電話號碼中刪除前導零。
在這裡開啟機密 CSV 是否安全?
是的。 使用 JavaScript 和 FileReader API 完全在瀏覽器中運行解析。 沒有檔案、儲存格或搜尋查詢會傳輸到伺服器或記錄。 您可以使用該工具開啟瀏覽器 DevTools 網路標籤,或透過斷開網路來驗證這一點。
相關工具
- csv 到 json- 具有類型選項的專用轉換
- json 到 csv- 回程,包括嵌套物件展平
- XML 到 JSON- 對於以 XML 形式到達的匯出
- json 格式化程式- 清理您剛剛匯出的 JSON
- JSON 差異- 比較兩個出口並找出變化
進一步閱讀: JSON 工具終極指南 和 JSON 到 CSV 轉換.



