午後にかかった最後の CSV は、クライアントの WooCommerce ストアからの 40 MB のエクスポートでした。 ダブルクリックしたところ、Excel は SKU 列が日付であると判断し、 2024-11-3 突然だった 2024-11-3ーexcept it was't, it was a product code. Excelは、それをうまく書き直していた。 " cleaned" ファイルは、すでに逆輸入されており、数百の製品には、何も指さないSKUがあった。
これが、スプレッドシート アプリケーションで CSV を開く際の問題です。 スプレッドシートは視聴者ではなく、意見を持った編集者です。 タイプを強制し、郵便番号と電話番号から先頭のゼロを取り除き、漠然と日付のように見えるものはすべて再解釈し、1 つの行を確認する前にこれらすべてを行います。 時にはあなたがしたいだけです みるの ファイル - 列名を確認し、行数を確認し、インポートを破ったレコードを見つけて、出力します。
私が造る Toolz.dev そして、私は他の人を読みました& #39; s CSVは絶えずエクスポートします - Stripeの支払い、データベースダンプ、分析抽出、プラグイン移行ファイル それで私は構築しました CSVビューア 退屈で正直なオプションになること: ファイルを解析し、その中にあるものを正確に表示し、何も変更しない。 タイプの強制も、オートコレクトも、アップロードもありません。 テキストを貼り付けるか、ファイルを削除すると、検索して並べ替えることができるテーブルとして表示されます。
tl;dr: CSV ビューアは、境界設定されたテキストを解析し、値を編集または強制せずにテーブルとしてレンダリングします。 ザ・ CSVビューア ファイルがコンマ、セミコロン、タブ、またはパイプ、ハンドルを使用しているかどうかを自動検出します RFC 4180 引用フィールド (セル内のカンマと改行、二重引用符)、ぼろぼろの行と重複したヘッダーについて警告し、正規化された CSV または JSON にエクスポートします。すべてがブラウザーで実行されます。ファイルはアップロードされず、値は文字列のままであるため、先頭のゼロは存続します。
CSV ファイルとは何ですか?
CSV はカンマ区切りの値を表し、3 つの単語のうち 2 つが信頼できないため、その名前は 10 年間のバグの原因となります。
値は常にコンマで区切られているわけではありません 小数点区切り文字としてコンマを使用するロケール - ヨーロッパ大陸の大部分 - 代わりにセミコロンでエクスポートします 1,50;2,75 明白で、 1,50,2,75 ではありません。 ドイツ語またはフランス語のロケールで Excel は、デフォルトでこれを行います。 分析とデータベースのエクスポートではタブがよく使用され、ログ パイプラインではパイプが頻繁に使用されます。 これらのいずれかは、いまだに「CSV」である。
そして、値は必ずしも明白ではありません。 値に区切り文字が含まれている瞬間、フォーマットにはエスケープ ハッチが必要です。RFC 4180 は、フィールドを二重引用符で囲みます。 これらの引用符の中で、区切り文字は単なる文字です。 引用符自体は、それを 2 倍にすることでエスケープされます。 引用されたフィールドには、リテラル ライン ブレークが含まれる場合があります。つまり、1 つの論理レコードがファイル内の複数の物理行にまたがることができます。
その最後のポイントは、素朴なパーサーが死ぬところです。 あなたのコードが line.split(',')ーそして私はその行を書きました、そしてあなたもそうでした - そうすればこのファイルはそれを破壊します:
id,name,note
1,"Smith, John","He said ""hi""
on the second line"
2,Ada,plain
3 つの列、2 つのレコード。 カンマで分割されたパーサーは、2 行目に 4 つのフィールドを表示し、迷子の引用文でパニックに陥り、ラップされた行を 3 番目のレコードとして扱います。 適切なパーサーは文字列文字を文字ごとに歩き、現在引用符の中にあるかどうかを追跡し、ファイルの意味を正確に生成します。 2 つ目の操作は CSV ビューアです。
CSV ビューアーの主な機能
自動区切り文字検出
ファイルを貼り付け、ツールは他のことをする前に区切り文字を推測します 素朴なアプローチは、文字を数えて最も頻繁なものを選択することですが、散文ですぐに失敗します - a notes 英文の列いっぱいに、セミコロンで区切られたファイルよりもはるかに多くのカンマが含まれています。
検出スコア 一貫性 周波数の代わりに。 空でない最初の 10 行を取り、引用符で囲まれたセクション以外の各候補区切り文字 (カンマ、セミコロン、タブ、パイプ) をカウントし、すべての行で同じカウントを生成する候補に報酬を与えます。 本物の区切り文字が正確に表示されます columns - 1 行ごとに、すべての行。 prose 内のカンマが不規則に表示されます。一貫性が勝ち、頻度は関係を破るだけです。それでも推測が間違っていた場合 - そして、1 列のファイルではそうなります - ドロップダウンからオーバーライドできます。
RFC 4180 引用されたフィールドの解析
パーサーは文字レベルのステート マシンであり、正規表現でも分割でもありません。 1 つのブール値を追跡します。引用符で囲まれたフィールドの中にいますか? 引用符の内側、区切り文字と改行は通常の文字で、2 倍の文字列です。 "" 単一の文字通りの引用を発行します。 引用符の外側では、区切り文字がフィールドを終了し、改行でレコードを終了します。 Windows エクスポート、UNIX エクスポート、古い Mac エクスポートはすべて同じ受信トレイに収まるため、CRLF、LF、およびベア CR の行の終末はすべて受け入れられます。
これが、あなたを見せる視聴者の違いです Smith, John 1 つのセルで、あなたを見せる 1 つのセルで "Smith あんど John" 2つで。
すべての列を検索
検索ボックスは、行内のすべてのセルに対して大文字と小文字を区別しない部分文字列で行をフィルタリングします。あいまいではなく、クエリ言語でもありません。これは意図的なものです。インポートを破ったレコードを探しているときは、注文 ID または電子メール アドレスを持っています。それを含む行がすぐに必要です。
検索は、メモリ内の解析されたデータで実行されるため、ブラウザーが保持できる任意のサイズのファイルで即座に実行できます。ソートで構成します: 最初にフィルターをかけて、結果を並べ替え、残ったものをエクスポートします。
数値認識列の並べ替え
列見出しをクリックして並べ替えます。これは些細なことのように聞こえますが、そうではありません。CSV には型がないため、すべての値が文字列として到着し、文字列の並べ替えが適用されます 100 前に 9 あんど 2024-3-1 前に 2024-11-1。
ソートは値を検査します。比較の空でないすべてのセルが数として解析される場合 (数千の区切り記号が削除されて) は、数値で比較されます。 そうでなければ、ロケール認識文字列と数値照合との比較にフォールトします。 item2 前に並べ替えた item10。空のセルは常に両方向で下部に沈みます。ブランクは小さな値ではなく、欠落している値であり、欠落しているデータを下降ソートの上部に埋めると、それに気づかないからです。
データ品質に関する警告
先に進む前に、2 つの構造上の問題が発生します。
ぼろぼろの列。 行にヘッダーよりも多くまたは少ないフィールドがある場合、上流に何か問題があります。値、切り捨てられたエクスポート、ストレイ ニューライン内の引用符なしの区切り文字です。 ビューアは短い行を埋めて長い行を切り捨て、テーブルがレンダリングを続け、影響を受けた行数を正確に示します。 10 千のうち 3 つぼのぼった行を持つファイルには、データのバグがあるため、そのカウントは最初に確認した数です。 COPY Postgres に入り、午前 3 時に出ます。
列名が重複しています。 2 つの列が呼び出されます id ほぼすべてのダウンストリーム コンシューマーで互いに静かに上書きされます。パンダはそれらの名前を変更し、JSON 変換は最後の名前のみを保持し、SQL インポートはエラーになります。ビューアは警告バナーでそれらに名前を付けるため、ヘッダーを問題なく修正できます。
CSV と JSON エクスポート
エクスポート パネルは、現在画面上にあるもの (フィルタリング、ソート、実行したもの) を再シリアル化します。 CSV エクスポートでは、途中で正しい RFC 4180 引用符が適用されるため、一貫性のない引用符で囲まれたファイルを正規化するための適切な方法になります。 JSON エクスポートでは、テーブルがヘッダー行によってキー付けされたオブジェクトの配列に変換されます。これは、スクリプトまたは API をフィードするときに必要なものです。
意図的な選択肢の 1 つ: エクスポートされた値は文字列のままです。 "01234" ならない 1234. CSVの列が数字でいっぱいになるのは 数量かもしれませんし 郵便番号 口座番号 電話番号 SKUかもしれません - そしてデータから見分ける方法はありません 数字を強制すると 先頭のゼロが永久に捨てられます この記事のきっかけとなった まさにバグです 数字が必要な場合は 反対側に明示的に投げます 列の意味が分かっているところです。
それは完全にあなたのブラウザで実行されます
ファイルは、 FileReader JavaScript で API と解析。 何もアップロードされず、検索クエリもログも記録もサーバーに触れるデータもありません。 これはポリシーの約束ではありません。ツールを使用しているときに [DevTools' ネットワーク] タブを開いて、または Wi-Fi を引いて機能を監視することで確認できるアーキテクチャの事実です。
それは思ったよりも重要です。 見る価値のあるほとんどの CSV ファイルには、見知らぬ人の Web サイトに貼り付けないものが含まれています: 顧客の電子メール、給与計算、注文履歴、本番データベースからのエクスポート。 GDPR、HIPAA、またはクライアント NDA の下で働いている場合、「オンライン コンバーターに貼り付けました」は、大声で言いたい文章ではありません。 その脅威モデルについて詳しく書きました クライアント側のツールがクラウド コンバーターに勝る理由。
CSV ビューアの使い方
ステップ 1: ファイルをロードする
2 つの方法 CSV テキストを入力ボックスに直接貼り付けます - ログからのスニペット、Slack メッセージ、または目玉にしたい API レスポンスに適しています。 または をクリックします ファイルをアップロード そして、 .csv、 .tsv、または .txt マシンからファイル。 ファイルはローカルで読み込まれます。アップロード ボタンはファイルです。 ピッカー、アップロードではありません。
スプレッドシートから貼り付ける場合、ほとんどのスプレッドシート アプリケーションは、タブで区切られたテキストをコンマではなくクリップボードに配置することに注意してください。 区切り記号をタブに設定するか、自動でそのままにして、検出に処理させます。
ステップ 2: 解析設定を確認する
3 つの設定、ほとんどの場合、デフォルトが正しいです。
デリミタ デフォルトでは自動です。 ファイルに 1 つの列がある場合、または小さなサンプルで検出が間違っていると推測した場合は、それをオーバーライドします。
最初の行はヘッダーです がオンです。 headerless files の場合はオフにします - 列は になります Column 1、 Column 2など、行は消費されません。
空白をトリムする オンで、すべてのセルから先行スペースと末尾のスペースを取り除きます。 これは通常、あなたが望むものです。 , 手書きの CSV では、区切り記号が非常に一般的です。 CSV にダンプされた固定幅フィールドなど、データに意味のある先行スペースがある場合は、それをオフにします。
ステップ 3: 表を読む
たえます 表として表示 そして解析されたグリッドに stats 行を加えたものを得ます: 合計の数のうち何行が見えるか、何列か、どの区切り文字が使われたか、そして何列が完全数値であるか、その数値カウントは高速な健全性チェックです - 数値になると予想している列がカウントされない場合、その中のいくつかの行には非数値が保持され、通常はインポートを破る行です。
検索フィルタ行を検索します。 ヘッダーをクリックすると並べ替えられます。 2つが作曲します。
ステップ 4: エクスポートまたは次に進む
表示されるテーブルを JSON としてコピーしてダウンロードし、CSV としてダウンロードするか、JSON としてダウンロードします。 フィルタとソートがエクスポートに適用されるため、[検索] refunded、日付で並べ替え、ダウンロード csv を正確にそのサブセットにします。
これは、CSV を開く他の方法と比べてどうですか?
| 近づく | データを強制する | 引用されたフィールドを処理します | オフラインで動作します | どこにでもデータを送信 | いいね |
|---|---|---|---|---|---|
| CSV ビューア (Toolz.dev) | いやー | はい (RFC 4180) | はいって | いやー | 検査、検索、正気度チェック、JSON への変換 |
| エクセル/Google シート | はい - 日付、先頭ゼロ、科学的表記法 | はいって | エクセル うん、シート いいえ | Google へのシートのアップロード | 編集、式、グラフ |
| テキストエディタ | いやー | いいえ - 頭の中で解析します | はいって | いやー | 小さなファイル、行末の確認 |
csvkit / xsv /duckdb cli |
いやー | はいって | はいって | いやー | 巨大なファイル、スクリプト作成、結合、集計 |
パンダ read_csv |
はい、デフォルトで (dtype=str それを止めるために) |
はいって | はいって | いやー | 分析、変換パイプライン |
| ほとんどの「オンライン CSV ビューア」サイト | ちがう | 通常 | いやー | はい - サーバーにアップロードされました | 気にすることは何もない |
正直な要約: 数百メガバイトを超えるファイルの場合は、duckdb または xsv- ブラウザは1 つのパスでメモリにファイル全体を解析し、それを回避する方法はありません 数式で編集する必要があるものについては、スプレッドシートを使用して強制を受け入れるか、テキストとしてインポートする必要があります その間のすべてのために - デイリー&クォート; このファイルに実際に何があるのか、そしてなぜ行4,201 break" を行ったのか - 何も変更しないビューアは適切なツールです。
よくある使用例
失敗したインポートのデバッグ
" 予期される8 列でCSVインポートが失敗し、4201" 行で9 を取得します ビューアでファイルを開く、ぼろぼろの行の警告を確認してから、そのレコードにあることがわかっている値を検索すると、10 回中9 回、アドレスまたは会社名の中に引用符で囲まれていないカンマが見つかります - Acme, Inc. 引用なしで書かれています。 これで、エクスポートを修正するか、ファイルを前処理するかがわかります。
データベースのエクスポートをどこかに行く前に確認する
クライアントのデータがラップトップから離れる前に、そのデータに何が入っているかを知りたいと考えています。 列名、行数、 email 重複する ID があるかどうかに関係なく、列に完全に入力されます。 統計行と列の塗りつぶし/固有数のカウントは、ファイルがサーバーに到達することなく、約 10 秒ですべてに応答します。
API またはスクリプトの CSV を JSON に変換する
レコードのスプレッドシートがあり、データベースのシード、REST エンドポイントのフィード、またはフィクスチャ ファイルの構築に JSON として必要とします。 貼り付け、解析、JSON をエクスポートします。 逆転が必要な場合は、 CSVからJSONへ あんど JSONからCSVへ ツールは、より多くのオプションを使用して専用の変換を処理します。私は、ラウンドトリップの問題について詳しく説明しました。 JSON から CSV への変換ガイド。
1 つの列として開かれたヨーロッパの輸出品を確認する
クライアントはドイツのexcelのインストールからエクスポートを送信し、すべての行は1 つの長い文字列です。 semicolonに区切り文字を設定し、それは列にスナップします。 これは4 秒かかり、知る価値があります、なぜなら反射" ファイルは壊れています" 間違っています - ファイルは問題ありません、あなたのparser& #39; sの仮定はそうではありませんでした。
分析または広告プラットフォームのエクスポートの監査
GA4、Google 広告、およびメタ エクスポートは、実際のヘッダーの上にメタデータ行を含む CSV として到着します。 " をオフにします。最初の行は header" です。図形を見ると、実際のヘッダーがどの行にあるかが正確にわかります。次に、ペースト ボックスからジャンク行を削除し、再解析します。
テクニカル ディープ ダイブ: 実際に重要な解析ルール
RFC 4180 は説明であり、誰もが強制する標準ではありません。 2005 年に公開され、CSV の実装がすでに行ったことを文書化しましたが、多くの場合は異なることを明示的に指摘しています。 送信されたファイルに関する保証としてではなく、それを正常なベースラインとして扱います。
引用ルール。 フィールドは二重引用符で囲むことができます。 引用符、区切り文字、CR、LF、および二重引用符 ("" → ") はリテラルです。引用符で囲まれていないフィールドの真ん中に表示される引用符は曖昧です。ビューアは、引用符がフィールドの最初の文字である場合にのみ引用符を有意なものとして扱います。これが、ほとんどの実際のパーサーの動作方法であり、次のような値が得られます 6" nails 生き残る。
行末。 CRLF は仕様が言うことです。 LF は、UNIX が生み出すものです。 ベア CR は、非常に古い Mac ソフトウェアが生成したものであり、いくつかの組み込みシステムが今でも生成するものです。 パーサーは、1 つのファイル内の混合終了を含め、3 つすべてを受け入れます。混合された結末は、2 つのマシンで編集されるときに完全に発生するからです。
ボム。 Excel で書かれた UTF-8 ファイルは、バイト順のマークで始まります。 EF BB BF。 最初の列名が次のようになったら id しかし、それに対する文字列の比較 "id" 失敗すると、目に見えない BOM が前面に乗っています。 これは、CSV 処理で「ヘッダールックアップが失敗する理由」の最も一般的なものです。
後続の改行。 改行で終わるファイルには余分な空のレコードはありません。改行は最後のレコードを終了します。 viewer's skip-empty-lines オプションを使用すると、どちらの方法でもこれは問題になりません。
型推論。 あります& #39; t 任意. CSV は型を持っていません. ファイル内のすべての値は文字列であり, 反対側から出る型は推測に基づいてパーサーによって発明されました. これは形式の欠陥ではなく, それは形式です& #39; s 全体の性質 - そしてそれはビューアがあなたに代わって推測することはありません理由です。
フェイク
Excel なしで CSV ファイルを開くにはどうすればよいですか?
ファイルを CSVビューア または、その内容を入力ボックスに貼り付けます。 ファイルはブラウザーで解析され、検索および並べ替えができるテーブルとして表示されます。 スプレッドシート ソフトウェアもインストールもサーバーへのアップロードもありません。
CSV が 1 つの長い列として開くのはなぜですか?
区切り文字が一致しません。 ロケールでエクスポートされたファイルは、小数点の区切り記号としてコンマを使用する場合、フィールド間でセミコロンを使用し、タブ区切りのエクスポートではタブを使用します。 区切り設定を自動からセミコロン、タブ、パイプに切り替えると、列が正しく分割されます。
ビューアは引用符で囲まれたフィールド内でコンマを処理しますか?
はい。 パーサーは RFC 4180 に従います。二重引用符で囲まれたフィールドには、区切り文字、改行、および 2 つの二重引用符であるエスケープ クォートを行に含むことができます。 のような値 "Smith, John" 2 つに分割されるのではなく、1 つのセルに留まります。
CSV と TSV の違いは何ですか?
彼らは異なるフィールドセパレータを使用します - CSVはカンマで区切り、TSVはタブ文字で区切ります。 TSVは、タブがデータ値内にめったに発生しないため、引用符を少なくする必要があります。そのため、データベースと分析のエクスポートは、しばしばそれを好む理由です。このビューアは両方を読み取ります; TSVファイルの区切り文字としてタブを選択します。
「ぼろぼろの行」の警告は何を意味しますか?
行には、ヘッダー行よりも多くのフィールドまたは少数のフィールドがあります。 通常、値、切り捨てられたエクスポート、または迷走線の破線を含むフィールド内の引用符なしの区切り文字を意味します。 ビューアは短い行を埋めて長い行を切り捨て、テーブルがレンダリングを続け、影響を受けた行数を示します。
ファイルサイズに制限はありますか?
ファイル全体が 1 つの JavaScript パスで解析されるため、実際の制限はブラウザーのメモリです。 数十メガバイトまでのファイルは、典型的なラップトップでは問題ありません。 マルチギガバイトのエクスポートの場合は、CSVKit、DuckDB、パンダなどのストリーミング ツールを ChunkSize で代わりに使用します。
CSV を JSON に変換できますか?
はい。 「エクスポート」パネルは、解析されたテーブルをヘッダー行によってキーが付けられた JSON オブジェクトの配列に変換し、コピーまたはダウンロードできます。値は設計上文字列として残ります。数値を強制すると、ID、郵便番号、電話番号から先頭にゼロが削除されます。
ここで機密 CSV を開くのは安全ですか?
はい。 JavaScript と FileReader API を使用して、ブラウザーで完全に解析します。 ファイル、セル、または検索クエリは、サーバーに送信されたりログに記録されたりしません。 このツールの使用中にブラウザーの DevTools ネットワーク タブを開くか、インターネットから切断することで、これを確認できます。
関連ツール
- CSVからJSONへ- 型オプションを使用した専用の変換
- JSONからCSVへ- ネストされたオブジェクトの平坦化を含む帰路
- XML から JSON へ- 代わりに XML として到着するエクスポートの場合
- JSON フォーマッターエクスポートしたばかりのJSONをクリーンアップします
- json 差分ー2 つのエクスポートを比較して、何が変わったかを見つけます
さらに読む: JSON ツールの究極のガイド あんど JSON から CSV への変換。



