CSVとは何ですか?フォーマット、ルール、用途、一般的な落とし穴

CSVとは何ですか?フォーマット、ルール、用途、一般的な落とし穴

Scrapeless Scraping APIは、スプレッドシート、データベースインポート、および分析ワークフローのためにCSV形式で構造化されたウェブデータを返すことができます。

要約

  • CSVはテキストとしてテーブルを保存します。 各レコードは通常1行であり、区切り文字がそのレコード内のフィールドを区切ります。
  • CSVは方言のファミリーです。 RFC 4180は広く使用されるカンマとダブルクォートのベースラインを文書化していますが、実際のファイルは区切り文字、エンコーディング、行の終了、ヘッダー、そしてヌルの規則が異なります。
  • 引用符は特殊文字を保護します。 カンマ、引用符、または改行を含むフィールドはダブルクォートで囲む必要があり、リテラルのダブルクォートは2つのダブルクォートで表されます。
  • CSVは完全なスキーマを持ちません。 タイプ、必須フィールド、日付、ヌル、単位、および識別子のルールは文書、サイドカーのスキーマ、または受信システムから取得する必要があります。
  • 安全なインポートは変換前に検査します。 ダイアレクトを検出し、元のテキストを保持し、列の数を検証し、スプレッドシートの数式をセキュリティ上の懸念として扱います。

CSVファイルとは何ですか?

CSVはカンマ区切り値を表します。CSVファイルは、テキストとしての表形式データを表現します:行はレコードを表し、区切り文字は各レコードをフィールドに分けます。最初の行には通常、列名が含まれますが、ヘッダーは省略可能です。ファイル拡張子は通常 .csv, 登録されたメディアタイプは text/csv.

です。

おなじみのフォーマットは意図的にシンプルです。顧客のエクスポートには、識別子、名前、国、アカウントステータスの列が含まれる可能性があります。データベースはクエリ結果をCSVに書き込み、スプレッドシートはファイルを開くことができ、別のシステムはプロプライエタリなワークブック形式を共有せずに同じ行をインポートできます。RFC 4180は一般的なCSVフォーマットとtext/csvメディアタイプを文書化しています。

それはカンマ区切り文字、CRLFレコード境界、オプションのヘッダー、およびダブルクォートのエスケープを説明します。この文書は、CSVと呼ばれるすべてのファイルの普遍的な法律ではなく、情報に基づいています。多くのツールはバリエーションを受け入れたり生成したりするので、CSVファイルを交換するにはそのダイアレクトについて合意することが必要です。

CSV構文の仕組み

id,name,country,active
101,Ada,GB,true
102,Lin,SG,false
103,Sam,CA,true

最小限のCSVファイルには、ヘッダーと3つのレコードが含まれる可能性があります: id この例のすべての行には4つのフィールドがあります。ヘッダーはラベルを供給しますが、型は宣言しません。リーダーは、 active が整数であり、

がブーリアンであると推測するかもしれませんが、別のリーダーはすべてのフィールドをテキストとして保持するかもしれません。データ契約が1つを指定しない限り、両方の解釈が可能です。

区切り文字

カンマは標準的な区切り文字ですが、地域のエクスポートやアプリケーション固有のフィードでは、セミコロン、タブ、およびパイプが一般的です。小数点カンマのロケールは曖昧さを避けるためにセミコロンを使用することがよくあります。タブ区切り値は通常TSVと呼ばれますが、多くのインポートダイアログはCSVとTSVを1つの「区切られたテキスト」ワークフローの下にグループ化します。

プロデューサーは区切り文字を明示する必要があります。最初の行から推測すると、値に句読点が含まれている場合や、1列のファイルに区切り文字がない場合に失敗することがあります。受信パイプラインは明示的なダイアレクトの設定を許可し、検出された設定を報告する必要があります。

引用符とエスケープ

id,name,note
201,"Rivera, Ana","Asked for ""priority"" handling"
202,Chen,"First line
Second line"

カンマ、ダブルクォート、またはレコード境界を含むフィールドは、一般的なRFC 4180ルールに従って引用が必要です。引用されたフィールド内のダブルクォートは2倍になります:

2番目のレコードは、引用されたフィールドが改行を含む可能性があることを示しています。CSVルールを適用する前にファイルを行に分割するパーサーは、そのレコードを破損させます。一般的な文字列の分割の代わりに、引用を理解するCSVパーサーを使用してください。

ヘッダー header ヘッダー行は可読性を向上させ、消費者が名前によって列をマッピングできるようにします。ただし、CSV構文ではヘッダーが存在することを証明できません。受信システムは設定が必要です、または

メディアタイプのパラメーター。列名は一意で、安定しており、文書化されている必要があります。契約なしにヘッダーをトリムしたり、大文字小文字を変換したりすると、異なるフィールドが統合されることがあります。

CSVが定義しないもの

CSVはフィールド境界を記述しますが、ドメインの意味は記述しません。データ型、主キー、関係、単位、タイムゾーン、文字エンコーディング、または空フィールドが空の文字列、未知の値、または欠落した値を意味するかどうかを宣言する普遍的な方法を提供しません。 W3Cの表形式データおよびウェブ上のメタデータ は、列、データ型、タイトル、関係に関するメタデータとペアにする方法を説明することで、このギャップに対処します。チームはその完全なモデルを採用する必要はありませんが、どこか持続的な場所で同等の情報を提供する必要があります。

一般的なCSVダイアレクトの違い

次元一般的な選択肢なぜ重要なのか
フィールド区切り文字カンマ、セミコロン、タブ、パイプ間違った選択は列の見かけの数を変更します
引用文字ダブルクォート、シングルクォート、なし句読点と改行がフィールド内に留まるかどうかを制御します
エスケープ方式倍のクォート、バックスラッシュ方式不一致はリテラルの引用文字を変更します
ヘッダー提示、非提示、複数の説明行最初のレコードはデータと間違われることがあります
エンコーディングUTF-8、BOM付きUTF-8、レガシーエンコーディング間違ったデコーダーは名前や記号を壊します
レコードの終わりCRLF、LFほとんどの最新のパーサーは両方を受け入れますが、厳密なシステムは受け入れないかもしれません
ヌル値空のフィールド、センティネルテキスト、契約特有のマーカー空の文字列と欠落値は区別がつかなくなる場合があります

CSVが便利な理由

CSVは幅広くサポートされています。スプレッドシートアプリケーション、データベース、コマンドラインツール、データフレーム、分析プラットフォーム、ビジネスシステムは区切りテキストを読み書きできます。その互換性により、CSVはフラットテーブルの信頼できるハンドオフフォーマットになります。

CSVはまた、検査可能です。開発者はテキストエディタで小さなファイルを開くことができ、データアナリストはドメイン特有のビューワーをインストールせずにスプレッドシートにロードできます。表現に構造的なオーバーヘッドが少ないため、圧縮後は広く通常のテーブルにコンパクトになります。

この形式は、すべてのレコードが一つのスキーマに従う場合の追加専用エクスポートやバッチインポートによく機能します。1つのレコードにネストされたオブジェクト、配列、または可変のフィールドセットが含まれる場合にはあまり適していません。それらの構造は列にフラット化するか、関連するファイルに分割するか、別の方式を使用してセル内にエンコードする必要があります。

典型的なCSVの使用例

スプレッドシートハンドオフ

チームは、整列、フィルタリング、数式、または知られたインターフェースでのチャート作成を必要とする人々と在庫、キャンペーン、財務、および運用テーブルを交換します。

データベースのインポートとエクスポート

リレーショナルクエリの結果は自然に行と列にマッピングされ、エクスポート契約が識別子、ヌル、精度、タイムスタンプを保持する限りそうなります。

分析ステージング

小規模および中規模のデータセットは、パイプラインがそれらを検証し、型付きの分析ストレージに変換する前にCSVとして到着することがよくあります。

公共データ配布

機関や研究グループは、CSVでフラットなデータセットを公開します。受信者はそれらを多くの言語やデスクトップツールで処理できます。

CSVのセキュリティリスク

CSVファイルはデータですが、スプレッドシートソフトウェアは、イコール記号などの文字で始まるセルを数式として解釈する場合があります。信頼できない値が数式になると、エクスポートを開くと、そのスプレッドシート環境によってサポートされているアクションがトリガーされる可能性があります。この問題は、多くの場合、CSVまたは数式インジェクションと呼ばれます。

OWASPのCSVインジェクションガイダンス 信頼できない入力をエクスポートするアプリケーションがスプレッドシートの解釈を考慮する必要がある理由を説明します。プロデューサーは、ターゲットスプレッドシートの現在の安全なエクスポートガイダンスに従うべきであり、フィールドを引用することで数式の意味を無効にできると仮定すべきではありません。受信者は、制御された環境で不明なファイルを開いて、アクティブなコンテンツを有効にする前に疑わしい先頭文字を検査するべきです。

CSVのインジェクションにはリソース制御も必要です。ファイルサイズ、行サイズ、列数、フィールド長の制限を設定します。明確な位置で不正な引用を拒否します。監査目的のために元のファイルを保持し、フィールドが間違った列に移動するような方法で壊れたレコードを静かに修復することは避けてください。

CSVを信頼性高くインポートする方法

  1. 元のバイトを保持します。 エンコーディング、引用、行境界の問題を再現できるように、ソースファイルを変更しないでください。
  2. 方言を設定または検出します。 プロデューサーが提供する設定を優先してください。検出が必要な場合は、結果を記録し、高価値のデータを読み込む前にレビューを許可します。
  3. 明示的にデコードします。 UTF-8は合理的な交換のデフォルトですが、バイトオーダーマークや契約メタデータが別のエンコーディングを示す場合があります。
  4. CSVライブラリでパースします。 カンマや改行で分割しないでください。引用されたフィールドには両方を含むことができます。
  5. 形状を最初に検証します。 ヘッダー、重複した列名、フィールド数、必須の列、最大サイズを型変換の前にチェックしてください。
  6. スキーマの下で型を変換します。 明示的なロケールと精度ルールを使用して日付、小数、ブーリアン、および識別子を解析します。
  7. 無効なレコードを隔離します。 1つの不正な行がデータセットの残りをシフトさせることなく、レコードと理由を報告します。

CSVと他のフォーマットの比較

CSVはフラットテーブルの交換フォーマットとして最もよく理解されます。JSONはネストされたオブジェクト、配列、ブーリアン、数値、およびnullを追加します。NDJSONはストリームとログのために1行ごとに独立したJSON値を保持します。Parquetは分析スキャンのために構築されたバイナリレイアウトに型付けされた列を格納します。XLSXワークブックは、数式、スタイル、ワークシート、およびよりリッチなスプレッドシートの動作を保持できます。

実用的なパイプラインは、異なる境界でいくつかのフォーマットを使用する場合があります。CSVは人間の引き渡し、中間がJSON、分析ストレージ層がParquetになります。変換は次の消費者にマッチするときに価値があります。それは識別子、nullの意味、精度、または出所を消去してはいけません。

クリーンなCSVファイルを作成する方法

安定した列契約から始めます。ユニークなヘッダーを使用し、各レコードで同じ数のフィールドを出力し、選択された方言に従ってフィールドを引用し、1つの明示されたエンコーディングを書きます。先頭のゼロが重要な場合は、識別子フィールドをテキストとして保持してください。両者が合意した明確な日付表現を使用し、タイムゾーン情報をタイムスタンプに含めます。

契約がセルにJSONを含むことを明示的に述べておらず、エスケープを定義していない限り、ネストされたJSONをセルに配置しないでください。1対多の関係の場合、関連するレコードを共有キーを持つ別のファイルに分けるか、ネストをサポートするフォーマットを選択してください。複数のファイル、スキーマ、チェックサム、またはパーティションを含む配信の場合は、マニフェストを追加します。

結論

CSVはフラットテーブルに小さく広くサポートされたテキスト表現を提供するため、成功します。その明らかな単純さはデリミタ、引用、ヘッダー、エンコーディング、null、タイプ、スプレッドシートの動作に関する重要な選択を隠すことがあります。信頼できるCSVワークフローは、文書化された方言とデータスキーマを組み合わせ、専用ライブラリで解析して、変換前に検証し、元の入力を保持します。それらのコントロールにより、CSVはWebデータ、データベース、分析ツール、およびビジネスユーザー間の実用的な橋として機能します。

CSVデータワークフローを構築する準備はできましたか?

Scrapeless Scraping APIで構造化されたWeb結果を収集し、必要なシステムや人々にクリーンなテーブルを提供します。

今日サインアップして $5の無料クレジットを取得クレジットカードは不要です.

あなたの$5クレジットを請求する→

FAQ

CSVは常にカンマを使用しますか?

いいえ、カンマは公認のセパレーターですが、セミコロン、タブ、パイプ区切りのファイルも一般的です。プロデューサーと消費者はファイル名だけに依存せず、方言に合意する必要があります。

CSVフィールドにカンマまたは改行を含めることができますか?

はい、一般的なルールでは、ダブルクォートで囲まれたフィールド内にカンマと改行を許可します。そのフィールド内のリテラルのダブルクォートは、2つのダブルクォートで表されます。

CSVはデータ型をサポートしていますか?

CSV自体には普遍的な型システムは持っていません。受信アプリケーションまたは別のスキーマがフィールドがテキスト、数値、日付、ブーリアン、またはnullであるかを決定します。

CSVはExcelファイルと同じですか?

いいえ、CSVは1つのプレーンテキストテーブルを格納し、複数のシート、数式、スタイル、チャート、またはセルの型などのワークブック機能を保持しません。スプレッドシートアプリケーションはCSVを開くことができますが、フォーマットは異なります。

なぜ先頭のゼロがCSV値から消えるのですか?

先頭のゼロは通常、スプレッドシートまたはインポーターがフィールドを数値として推測したために消えます。郵便番号や口座番号などの識別子を明示的なスキーマの下でテキストとしてインポートしてください。

参考文献