web-dev-qa-db-ja.com

tsvとcsvの選択

テーブルを出力するプログラムがあり、csv形式とtsv形式の間に長所/短所があるかどうか疑問に思っていました。

31
PKompella

TSVは、Javascript/Perl/Pythonにとって非常に効率的であり、タイピング情報を失うことなく、人間にとっても読みやすくなっています。

この形式は、4storeの公開リリース以来サポートされており、合理的に広く使用されています。

私の見方では、CSVはスプレッドシートにロードするためのものであり、TSVはオーダーメイドのソフトウェアによる処理のためのものです。

それぞれの技術仕様はこちらでご覧いただけます

41
James

選択はアプリケーションによって異なります。簡単に言えば、フィールドにコンマが含まれていない場合は、CSVを使用します。それ以外の場合は、TSVが道です。

TL; DR

どちらの形式でも、フィールド内に区切り文字が表示されると問題が発生するため、区切り文字がフィールド区切り文字としてではなく、フィールド内の値として機能していることを示す必要があります。

たとえば、CSVを使用する場合:Kalman, Rudolfvon Neumann, JohnGabor, Dennis

いくつかの 基本的なアプローチ は次のとおりです。

  • フィールド内に表示されるすべての区切り文字を削除します。

    例えば。 Kalman Rudolfvon Neumann JohnGabor Dennis

  • 文字をエスケープします(通常、バックスラッシュ\を前に付けます)。

    例えば。 Kalman\, Rudolfvon Neumann\, JohnGabor\, Dennis

  • 各フィールドを他の文字で囲みます(通常は二重引用符")。

    例えば。 "Kalman, Rudolf""von Neumann, John""Gabor, Dennis"

[〜#〜] csv [〜#〜]

フィールドはコンマ,で区切られます。

例えば:

Name,Score,Country
Peter,156,GB
Piero,89,IT
Pedro,31415,ES

利点:

  • ほとんどのソフトウェアパッケージは設定を操作せずに読み取ることができるため、技術に詳しくない人と共有する場合は、より汎用的で便利です。

短所:

  • フィールド内のコンマをエスケープすると、誰もが標準に従っていないため、イライラすることがあります。
  • 余分なエスケープ文字と引用符はすべて、最終的なファイルサイズに重みを追加します。

[〜#〜] tsv [〜#〜]

フィールドは、<TAB>または\tの表で区切られています

例えば:

Name<TAB>Score<TAB>Country
Peter<TAB>156<TAB>GB
Piero<TAB>89<TAB>IT
Pedro<TAB>31415<TAB>ES

利点:

  • フィールド内にタブ文字を含めることは通常ないため、区切り文字をエスケープする必要はありません。それ以外の場合は、削除する必要があります。

短所:

  • それはあまり普及していません。
17
tashuhka

任意の区切り文字を使用できますが、タブやコンマは、Excel、MySQL、PostgreSQLなどの多くのアプリケーションでサポートされています。カンマはテキストフィールドでは一般的であるため、エスケープする場合は、エスケープする必要があります。それらをエスケープせず、フィールドにコンマが含まれている可能性がある場合、ファイルに対して "sort -k2,4"を自信を持って実行することはできません。とにかくフィールドのいくつかの文字(nullバイト、改行など)をエスケープする必要があるかもしれません。これらの理由などで、私の好みはTSVを使用し、タブ、nullバイト、およびフィールド内の改行をエスケープすることです。さらに、通常はTSVを使用する方が簡単です。タブ区切り文字で各行を分割するだけです。 CSVには、引用符で囲まれたフィールド、場合によっては改行が含まれるフィールドなどがあります。強制された場合にのみCSVを使用します。

3
Ben

通常、csvはtsv形式よりも頻繁にサポートされると思います。

1
Julio Diaz