CSVファイルの扱い方|作成・読み込み・注意点を初心者向けに解説
CSVは、表データを軽く受け渡ししたいときに最初に覚える形式です。Excelで作った一覧を他のツールへ渡す、システムから出力したデータを確認する、Pythonで一括処理する。こうした場面で頻繁に使われます。
一方で、CSVは見た目が単純なぶん、区切り文字、ダブルクォート、文字コード、先頭の0の消失などでつまずきやすい形式でもあります。最初に押さえるべき結論は次の通りです。
- CSVは「カンマ区切りの表データを保存するテキストファイル」
- 見た目は簡単でも、アプリごとに解釈が少し違う
- Excelで開いて確認するだけなら手軽だが、読み込み条件を意識しないと列崩れしやすい
- プログラムで扱うなら、文字列を手書きでつなぐより
csvモジュールなどの専用機能を使うほうが安全
この記事では、CSVで何ができるか、どう作るか、どう読むか、実務で困りやすい点は何かを、初心者向けに順を追って整理します。
CSVファイルとは何か
CSVは Comma-Separated Values の略で、1行を1レコード、カンマを区切りとしてデータを並べる形式です。IETFのRFC 4180では、ヘッダー行の有無、行ごとの項目数、ダブルクォートの扱いなど、広く使われる共通ルールが整理されています。
たとえば、顧客一覧なら次のように表せます。
id,name,email
1,Sato,sato@example.com
2,Suzuki,suzuki@example.com
この形式がよく使われる理由は単純です。
- Excel、スプレッドシート、データベース、業務システムの間で渡しやすい
- 中身がテキストなので、ツールをまたいでも扱いやすい
- 集計前の下処理や、一括インポートの中間形式として使いやすい
ただし、CSVは「見た目付きの表」ではありません。
- 数式
- セルの色や罫線
- 複数シート
- フィルター設定や書式
こうしたExcel固有の情報は、そのままでは保持できません。MicrosoftもCSV保存では使えない機能があること、保存時に現在のワークシートだけが対象になることを案内しています。
どんな場面で使うのか
CSVは、実務では次のような場面でよく出てきます。
データを別のツールへ渡すとき
ECサイトの受注一覧をダウンロードして会計ソフトへ渡す、MAツールから顧客リストを出して別システムへ取り込む、といった場面です。相手側がExcelファイルではなくCSVを要求することは珍しくありません。
Excelで一覧を整えてから登録したいとき
人事名簿や商品マスタをExcelで編集し、その後CSVで保存してシステムへ取り込む流れです。見た目はExcelで整えつつ、受け渡しはCSVにする形です。
Pythonやスクリプトで一括処理したいとき
CSVは1行ずつ読みやすいため、データの整形、重複除去、列追加、条件抽出に向いています。ログや台帳の整理にも使いやすい形式です。
ここがポイント: CSVは「人が目で見て確認しやすい」ことと、「プログラムで処理しやすい」ことの両方を持つ、中間受け渡し用の形式として強いです。
CSVファイルの作り方
作り方はいくつかありますが、初心者ならまずはExcelかテキストエディタで十分です。
Excelで作る
Excelで表を作り、名前を付けて保存 からCSV形式を選びます。ここで注意したいのは、Microsoftの案内どおり、CSV保存では現在のワークシートだけが保存対象になることです。
手順のイメージは次の通りです。
- 1行目に見出しを入れる
- 2行目以降にデータを入力する
ファイル→名前を付けて保存- 保存形式で
CSV (コンマ区切り)を選ぶ
向いている場面:
- 少量データを手で作る
- 元データを目視で確認したい
- まず形だけ試したい
テキストエディタで作る
CSVはテキストファイルなので、メモ帳やVS Codeでも作れます。簡単なサンプルならこちらのほうが構造を理解しやすいこともあります。
name,department,score
Tanaka,Sales,80
Yamada,Support,92
Pythonで作る
繰り返し使うなら、手作業よりスクリプト化したほうが安定します。Python標準ライブラリの csv モジュールを使えば、カンマや引用符の扱いを自前で組み立てずに済みます。
import csv
rows = [
["id", "name", "price"],
[1, "Keyboard", 2980],
[2, "Mouse", 1680],
]
with open("products.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(rows)
この例で重要なのは newline='' です。Python公式ドキュメントでも、CSVファイルを開くときは newline='' を使うよう案内されています。
CSVファイルの読み込み方
次は、既存のCSVをどう読むかです。読む方法によって、失敗しやすいポイントが変わります。
Excelで開く
CSVをダブルクリックしてExcelで開く方法は手軽です。ただし、Microsoftは、CSVを開くときに現在の既定のデータ形式設定で列を解釈すると案内しています。つまり、環境によっては次の問題が起きます。
00123が123になる1-2が日付扱いになる- 長い数値が指数表記になる
- 区切り文字の解釈が想定と違う
こういうときは、単純に開くのではなく、Excelの データ タブから テキスト/CSVから 読み込む方法が安全です。区切り文字や列の解釈を確認しながら読み込めます。
Pythonで読む
Pythonでは csv.reader や csv.DictReader を使うのが基本です。
import csv
with open("products.csv", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["name"], row["price"])
DictReader を使うと、列番号ではなくヘッダー名で値を取り出せます。列の順番が変わる可能性があるCSVでは特に便利です。
入力例と出力例
入力CSV:
id,name,price
1,Keyboard,2980
2,Mouse,1680
上のPythonコードを実行したときの出力例:
Keyboard 2980
Mouse 1680
CSVでよくあるルールと崩れやすい点
ここが、初心者がいちばん詰まりやすい部分です。
カンマを含む値はダブルクォートで囲む
住所や商品名にカンマが入ると、そのままでは列が増えたように解釈されます。
NG例:
name,address
Sato,Tokyo, Japan
この場合、Tokyo と Japan が別列扱いされやすくなります。
改善例:
name,address
Sato,"Tokyo, Japan"
RFC 4180でも、カンマや改行、ダブルクォートを含む値では引用が必要になる形が整理されています。
ダブルクォートを値の中に含めるときは連続させる
たとえば商品説明に "限定" のような引用が入る場合、CSVではダブルクォートを2つ重ねて表すのが一般的です。
title
"春の""限定""セット"
ヘッダーの有無をそろえる
CSVには見出し行がある場合とない場合があります。受け取り側のシステムが「1行目はヘッダー」と想定しているのか、「1行目からデータ」と想定しているのかを合わせないと、先頭行が消えたように見える原因になります。
列数をそろえる
1行ごとに項目数が違うCSVは、読み込みエラーや列ずれの原因になります。
確認したい点:
- 全行で区切り数がそろっているか
- 空欄を飛ばしていないか
- 末尾に不要なカンマがないか
実務で多い失敗と対処
CSVは簡単そうに見えて、実際は「開いたら壊れた」と感じやすい形式です。よくある失敗を先に知っておくと、かなり防げます。
先頭の0が消える
郵便番号、社員番号、商品コードでよく起きます。Excelが数字として解釈すると、00123 は 123 になります。
対処:
- Excelで開く前提なら、インポート時にその列を文字列として扱う
- コード類は数値ではなく文字列として管理する
- 単純にダブルクリックで開かず、読み込み設定を確認する
文字化けする
CSVはテキストなので、文字コードが合わないと日本語が崩れます。UTF-8で書き出したCSVを、別の想定で開くと化けることがあります。
対処:
- 出力側の文字コードを確認する
- 受け取り側ツールでUTF-8として読み込めるか確認する
- 「開く」ではなく「インポート」で読み込み条件を明示する
区切り文字が合わない
CSVという名前でも、実際にはセミコロン区切りなど、環境依存の差があります。Microsoftも、区切り文字は設定変更の影響を受けることを案内しています。
対処:
- 相手システムの取り込み仕様を先に確認する
- Excelの既定値だけに頼らない
- Pythonでは
delimiterを明示する
import csv
with open("sample.csv", encoding="utf-8", newline="") as f:
reader = csv.reader(f, delimiter=",")
for row in reader:
print(row)
改行を含むセルで崩れる
問い合わせ内容や備考欄に改行があると、1行1レコードと思って処理したスクリプトで崩れやすくなります。専用のCSVパーサーを使わず、文字列分割だけで処理すると事故が起きやすい典型例です。
CSVを split(',') で雑に処理しない、これが基本です。
CSVを扱うときのおすすめ手順
初心者が実務で安全に進めるなら、次の流れが現実的です。
- まずは元データの列名と列数を確認する
- 先頭数行をテキストとして見て、区切り文字と引用符の有無を確認する
- Excelで直接開く前に、文字コードや先頭0が重要な列を把握する
- 繰り返し処理するなら、Pythonの
csvモジュールなど専用機能で扱う - 保存後は、別ツールでも開いて崩れていないか確認する
代替手段と使い分け
CSVが万能というわけではありません。用途によっては別形式のほうが向いています。
Excelファイル(.xlsx)が向く場面
- 複数シートが必要
- 書式や数式を残したい
- 人が編集する前提が強い
JSONが向く場面
- 入れ子構造のデータを扱う
- API連携が中心
- 配列やオブジェクト構造を保ちたい
CSVが向く場面
- 一覧表を軽く受け渡ししたい
- システム間でインポート・エクスポートしたい
- 行単位の処理や集計前の整形をしたい
つまり、平らな表データを広く受け渡すならCSV、構造や見た目まで持ちたいなら別形式という使い分けがわかりやすいです。
まとめ
CSVは、作ること自体は難しくありません。難しいのは、相手のツールがどう解釈するかを意識して扱うことです。
最低限、次の4点を押さえるだけでも失敗は大きく減ります。
- カンマや改行を含む値は引用が必要になる
- Excelで直接開くと、列の解釈で意図が変わることがある
- 先頭の0や文字コードは特に崩れやすい
- スクリプトで処理するなら専用のCSV機能を使う
次にCSVを触るときは、まず「このファイルは誰が作り、どのツールで開き、どこへ渡すのか」を確認してみてください。CSVの事故は、書き方そのものより、受け渡し先の前提を見落としたときに起きます。
