MENU

CSVとTSVの違いを実務で選ぶ基準:区切り文字、Excel、Python処理の基本

CSVとTSVの違いを実務で選ぶ基準:区切り文字、Excel、Python処理の基本

CSVとTSVの違いを実務で選ぶ基準:区切り文字、Excel、Python処理の基本

CSVとTSVは、どちらも表データをテキストで受け渡すための形式です。違いはシンプルで、CSVはカンマ、TSVはタブで列を区切る点にあります。

ただし実務では、この1文字の違いがトラブルの原因になります。商品名にカンマが入る、住所に改行が混じる、Excelで開いたら文字化けする、自動処理で列数がずれる。こうした場面では「CSVでよいか」「TSVにした方が扱いやすいか」を先に決めるだけで、後工程がかなり楽になります。

この記事で分かることは次の通りです。

  • CSVとTSVの基本的な違い
  • Excel、WordPress、サーバーログ、自動化処理での使い分け
  • PythonでCSV/TSVを読み書きする最小例
  • 区切り文字、文字コード、改行、引用符で起きやすい失敗
  • JSONやExcelファイルなど、別形式を選ぶべき場面

対象読者は、Web制作、WordPress運用、サーバー管理、自動化スクリプトで表データを扱い始めた人です。コード例は Python 3 の標準ライブラリ csv を使います。

目次

CSVとTSVの違いは「列を何で区切るか」

CSVとTSVは、どちらも1行を1レコードとして扱うテキスト形式です。違いは列の区切り文字です。

形式区切り文字拡張子向いている場面
CSVカンマ ,.csvExcel、管理画面、各種サービスのインポート/エクスポート
TSVタブ.tsv または .tabテキスト処理、ログ加工、カンマを多く含む文章データ

CSVは「Comma-Separated Values」の略で、カンマ区切りの値という意味です。RFC 4180では、CSVの一般的な形式として、各レコードを行で分け、各フィールドをカンマで区切る形が説明されています。

TSVは「Tab-Separated Values」の略で、タブ区切りの値です。IANAの text/tab-separated-values の説明では、各レコードを1行で表し、各フィールドをタブ文字で区切る形式として扱われています。

ここがポイント: CSVとTSVは「Excel用のファイル」ではなく、表データを別のツールへ渡すためのテキスト形式です。Excelはその読み書きに対応している代表的なツールの一つです。

入力例で見る違い

同じデータでも、CSVでは次のようにカンマで列を分けます。

id,name,price
1,WordPress保守,30000
2,CSV変換,12000

TSVでは、見た目では少し分かりにくいですが、列の間にタブ文字が入ります。

id  name    price
1   WordPress保守 30000
2   CSV変換   12000

実際のTSVファイルでは \t という2文字ではなく、キーボードのTabキーで入力されるタブ文字が入ります。エディタによっては、タブが広い空白のように表示されます。

実務ではCSVが入口、TSVが加工用になりやすい

迷ったら、外部サービスや管理画面との受け渡しにはCSV、スクリプトやCLIで加工する途中データにはTSVを検討すると判断しやすくなります。

CSVは対応ツールが多く、Excelや各種管理画面で選びやすい形式です。MicrosoftのExcelヘルプでも、テキストファイルやCSVファイルのインポート/エクスポート手順が案内されています。WordPressのプラグイン、EC管理画面、広告管理ツール、顧客管理ツールでもCSVはよく使われます。

一方でTSVは、本文や住所のようにカンマが自然に出てくるデータで扱いやすいことがあります。カンマを列区切りとして使わないため、英文の商品名や住所、説明文にカンマが含まれても、列の境界と混同しにくいからです。

CSVを選びやすい場面

CSVは「相手側がCSVを指定している」場面に強い形式です。

  • Excelで開いて確認したい
  • WordPressやECサイトの管理画面へインポートしたい
  • 会計ソフト、広告管理画面、SaaSから出力されたデータを受け取る
  • メール配信リストや商品一覧を他社ツールへ渡す

CSVの注意点は、カンマ、ダブルクォート、改行を含む値です。RFC 4180では、カンマや改行、ダブルクォートを含むフィールドはダブルクォートで囲み、フィールド内のダブルクォートは二重にする形が示されています。

たとえば次のような商品名では、カンマが区切り文字ではなく値の一部です。

id,name,memo
1,"Basic, Standard Plan","初月のみ割引"

この引用符の処理を手作業で組み立てると、後で列数がずれやすくなります。CSVを書き出すときは、文字列連結よりも、言語やツールのCSVライブラリを使うのが基本です。

TSVを選びやすい場面

TSVは「人間が少し見て、スクリプトでも処理する」場面で使いやすい形式です。

  • サーバーログや集計結果を一時的に保存する
  • awkcutsort などのCLIツールで列単位に処理する
  • 説明文や住所にカンマが多いデータを扱う
  • Markdownやテキストエディタへ表データを貼り付ける前処理に使う

ただし、TSVにも弱点があります。IANAの説明では、TSVではフィールド内にタブを含められない形式として説明されています。つまり、自由入力のメモ欄や本文にタブが入る可能性があるなら、事前にタブを空白へ置き換える、またはCSVやJSONなど別形式を選ぶ必要があります。

PythonでCSVとTSVを読み書きする基本

Pythonでは標準ライブラリの csv モジュールでCSVもTSVも扱えます。違いは、読み書きするときに delimiter を変えるだけです。

ここでは、次のCSVを入力例にします。

id,name,price
1,WordPress保守,30000
2,"Basic, Standard Plan",12000

CSVを読む

import csv

with open("items.csv", newline="", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row["id"], row["name"], row["price"])

期待される出力は次の通りです。

1 WordPress保守 30000
2 Basic, Standard Plan 12000

Basic, Standard Plan にはカンマが含まれていますが、CSVとして正しく引用符で囲まれているため、1つの列として読めます。

Python公式ドキュメントでは、csv.readercsv.writer を使ってCSVを読み書きする方法が説明されています。ファイルを開くときに newline="" を指定する点も、実務では覚えておきたいポイントです。

TSVを読む

TSVを読む場合は、区切り文字をタブにします。

import csv

with open("items.tsv", newline="", encoding="utf-8") as f:
    reader = csv.DictReader(f, delimiter="\t")
    for row in reader:
        print(row["id"], row["name"], row["price"])

入力ファイルは次のような内容です。

id  name    price
1   WordPress保守 30000
2   Basic, Standard Plan    12000

TSVではカンマを区切り文字として見ないため、Basic, Standard Plan は引用符なしでも1つの値として扱えます。

CSVからTSVへ変換する

CSVを受け取ったあと、CLIやテキスト処理で扱いやすくするためにTSVへ変換したいことがあります。Pythonなら次のように書けます。

import csv

with open("items.csv", newline="", encoding="utf-8") as src, \
     open("items.tsv", "w", newline="", encoding="utf-8") as dst:
    reader = csv.reader(src)
    writer = csv.writer(dst, delimiter="\t", lineterminator="\n")

    for row in reader:
        writer.writerow(row)

この例では、入力CSVの引用符処理を csv.reader に任せています。そのうえで、出力側だけタブ区切りに変えています。CSVを自分で split(',') しないことが重要です。

よくある失敗は「区切り文字だけ見て中身を見ない」こと

CSV/TSVのトラブルは、形式名よりも中身の文字に原因があることが多いです。区切り文字、文字コード、改行、列数を最初に確認すると、原因を切り分けやすくなります。

失敗1: CSVをカンマで単純分割する

次のようなCSVを考えます。

id,name,memo
1,"Basic, Standard Plan",有料プラン

この行を単純に split(',') すると、商品名の中のカンマまで分割されます。

line = '1,"Basic, Standard Plan",有料プラン'
print(line.split(','))

出力は次のように壊れます。

['1', '"Basic', ' Standard Plan"', '有料プラン']

改善例は、CSVパーサーを使うことです。

import csv
from io import StringIO

line = '1,"Basic, Standard Plan",有料プラン'
reader = csv.reader(StringIO(line))
print(next(reader))
['1', 'Basic, Standard Plan', '有料プラン']

CSVは「カンマがあるテキスト」ではなく、引用符や改行のルールを持つ表データとして扱う必要があります。

失敗2: Excelで開いたら文字化けする

CSVやTSVは、ファイル内に文字コードの情報を必ず持っているわけではありません。UTF-8、Shift_JIS、BOM付きUTF-8など、作成元と読み込み側の想定がずれると日本語が文字化けします。

実務では次を確認します。

  • 相手の指定文字コードはUTF-8か、Shift_JISか
  • Excelで直接ダブルクリックして開くのか、インポート機能で文字コードを指定するのか
  • Webシステムへアップロードする場合、仕様書に文字コード指定があるか
  • ファイル名だけで判断せず、実際のエンコーディングを確認したか

WordPressやWeb系の自動処理ではUTF-8を使うことが多いですが、古い業務システムや一部の国内向けCSVではShift_JIS指定が残っていることがあります。相手があるデータ交換では、先に仕様を確認するのが安全です。

失敗3: 改行入りのセルで行数がずれる

CSVでは、引用符で囲まれたフィールド内に改行が入ることがあります。説明文や問い合わせ本文をCSVに入れると、1件のデータが見た目上は複数行に見えることがあります。

id,message
1,"1行目
2行目"

この場合、行単位で単純に読み込む処理は壊れます。CSVライブラリを使えば、引用符内の改行を考慮して読めます。

TSVでは、フィールド内のタブや改行を避ける前提で運用されることが多いため、自由入力の長文をそのまま入れる用途には向きません。長文や入れ子構造を扱うなら、JSONやデータベースの方が適しています。

CSVとTSVを選ぶ実務チェックリスト

形式選びで迷ったら、ファイルを作る前に次の5点を確認します。

  • 受け取り側のツールはCSVとTSVのどちらに対応しているか
  • データの中にカンマ、タブ、改行、ダブルクォートが含まれるか
  • Excelで人が確認する必要があるか
  • CLIやスクリプトで列単位に処理する予定があるか
  • 文字コード、ヘッダー行、改行コードの指定があるか

選び方の目安は次の通りです。

状況選びやすい形式理由
管理画面へ商品一覧をアップロードするCSV対応サービスが多く、仕様として指定されやすい
カンマを含む英文や住所を多く扱うTSVまたはCSVライブラリ利用TSVならカンマ衝突を避けやすい。CSVなら引用符処理が必須
サーバーログをCLIで集計するTSVタブ区切りは列抽出やソート処理と相性がよい
改行を含む本文や複雑な設定を渡すJSONなど表形式だけでは構造や改行を安全に表しにくい
Excelで確認してから相手へ渡すCSVExcelや多くの業務ツールで扱いやすい

CSV/TSV以外を選ぶべき場面

CSVとTSVは軽くて便利ですが、万能ではありません。表データの形から外れるなら、別形式を選ぶ方が安全です。

JSONが向く場面

JSONは、1件のデータの中に複数の値や入れ子構造がある場合に向いています。

{
  "id": 1,
  "name": "WordPress保守",
  "options": ["月次バックアップ", "更新確認"]
}

CSVで同じ情報を表そうとすると、オプション列をどう分けるか、配列をどの記号で連結するかを決める必要があります。API連携や設定ファイルでは、JSONの方が自然なことが多いです。

Excelファイルが向く場面

人が手で編集し、複数シート、数式、表示形式、入力規則を使うなら、CSVよりも .xlsx の方が向いています。CSVやTSVは基本的に1つの表をテキストで保存する形式なので、シート名やセルの色、数式の意味までは保持しません。

ただし、自動処理では .xlsx よりCSV/TSVの方が扱いやすい場面もあります。サーバー上で軽く読み書きしたい、Gitで差分を見たい、ログ処理に流したい場合は、テキスト形式の強みが出ます。

まとめ:交換先が決まっているならCSV、加工中心ならTSVも候補

CSVとTSVの違いは、列をカンマで区切るか、タブで区切るかです。実務では、その違いが「どの文字をデータ内に含めやすいか」「どのツールで読みやすいか」に直結します。

最後に、判断ポイントを短く整理します。

  • 外部サービスやExcelとの受け渡しでは、まずCSV指定の有無を確認する
  • カンマを含む文章データでは、CSVの引用符処理かTSV利用を検討する
  • TSVでは、タブや改行を含む値をどう扱うか先に決める
  • 文字化け対策として、文字コードを相手と明示的に合わせる
  • Pythonでは csv モジュールを使い、手作業の split(',') に頼らない

次に見るべきポイントは、実際に使うツールの読み込み仕様です。同じ .csv でも、文字コード、ヘッダー行、改行コード、引用符の扱いが違えば結果は変わります。ファイルを作る前に、交換先の仕様を1つ確認するだけで、あとから直す手間を減らせます。

参照リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次