PythonでCSVファイルを扱う方法!csvモジュールの基本と活用例
生徒
「Pythonで表みたいなデータを扱うとき、どうすればいいですか?」
先生
「そういう場合はCSVファイルを使うのがおすすめです。そしてPythonにはcsvモジュールが用意されているので簡単に扱えますよ。」
生徒
「CSVって何ですか?」
先生
「CSVは『Comma Separated Values』の略で、カンマで区切られたデータです。表計算ソフトでも開けます。今日はその読み書き方法を学びましょう。」
1. CSVファイルとは?初心者にも分かりやすく解説
CSV(シーエスブイ)ファイルとは、「Comma Separated Values」の略で、日本語では「カンマで区切られた値」という意味です。その名の通り、データをカンマ(,)で区切って保存する、非常にシンプルで汎用性の高いファイル形式です。
プログラミングの世界だけでなく、ExcelやGoogleスプレッドシートなどの表計算ソフト、データベースのバックアップ、顧客管理システム間のデータ移行など、あらゆる場面で「標準的なデータ形式」として利用されています。
- 互換性が高い:WindowsやMac、スマホなど環境を問わず開けます。
- 軽量:余計な装飾情報がないため、ファイルサイズが小さく処理が速いです。
- 中身はテキスト:メモ帳などのテキストエディタで中身を直接確認・編集できます。
例えば、名前、年齢、居住地という3つの情報を持つデータがある場合、CSV形式では以下のように記述されます。
名前,年齢,国
太郎,25,日本
花子,30,アメリカ
このように、1行が「1人分のデータ(レコード)」を表し、各項目をカンマで区切ることで、コンピュータが「どこからどこまでが名前で、どこが年齢か」を正確に判別できるようになっています。
2. csvモジュールの基本
Pythonのcsvモジュールを使うと、CSVファイルの読み書きが簡単にできます。まずは読み込みの基本を見てみましょう。
import csv
with open("sample.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
['名前', '年齢', '国']
['太郎', '25', '日本']
['花子', '30', 'アメリカ']
readerオブジェクトは、各行をリストとして返します。
3. CSVファイルへの書き込み(新規作成と保存)
リスト形式のデータをCSVファイルとして保存する方法を解説します。Python標準のcsvモジュールに含まれるcsv.writer()を使用すると、プログラミング初心者の方でも驚くほど簡単にデータを書き出すことが可能です。
ポイント:CSV書き出しは、Webスクレイピングの結果保存や、Excelで開ける名簿データの作成など、実務で非常に多用されるテクニックです。
import csv
# 書き込みたいデータ(リストの中にリストを入れた「2次元配列」形式)
data = [
["名前", "年齢", "国"],
["太郎", 25, "日本"],
["花子", 30, "アメリカ"],
["佐藤", 22, "イギリス"]
]
# ファイルを書き込みモード("w")で開く
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
# 複数行を一度に書き込む
writer.writerows(data)
print("CSVファイルへの書き込みが完了しました。")
コードの解説と注意点
初心者の方が特につまずきやすいポイントが、open()関数の引数です。newline=""を指定しないと、Windows環境などでは1行ごとに空行(空白の行)が入ってしまう現象が起きますが、これを記述することで綺麗なCSVが出力されます。
また、encoding="utf-8"は文字化けを防ぐための設定です。もし作成したCSVをExcelで直接開いて文字化けする場合は、ここをencoding="utf-8-sig"に変更すると、Excelが文字コードを正しく認識できるようになります。
4. PythonでCSVを辞書形式(DictReader/DictWriter)で読み書きする方法
CSV操作をより直感的に行うには、DictReaderとDictWriterが非常に便利です。通常の読み込みでは「1番目の列、2番目の列…」と番号で指定しますが、辞書形式を使えば「名前」や「年齢」といったヘッダー(列名)をキーとしてデータを扱えます。
プログラミング未経験の方でも、データの意味がひと目でわかるため、コードの書き間違いを防ぐことができます。
辞書形式での読み込み例(DictReader)
まずは、CSVの1行目をラベルとして読み込み、特定の項目だけを表示させる方法を見てみましょう。
import csv
# sample.csvの中身が「名前,年齢」という見出しである前提です
with open("sample.csv", "r", encoding="utf-8") as f:
# 辞書形式で読み込むための準備
reader = csv.DictReader(f)
for row in reader:
# row["列名"] でデータを取り出せるので分かりやすい!
print(f"名前は{row['名前']}さん、年齢は{row['年齢']}歳です。")
名前は太郎さん、年齢は25歳です。
名前は花子さん、年齢は30歳です。
辞書形式での書き込み例(DictWriter)
書き込みの際もDictWriterを使えば、どの列にどのデータを入れるかを明確に指定できます。writeheader()を呼び出すことで、1行目に自動で列名を作成してくれるのも大きなメリットです。
import csv
# 書き込むデータのリスト(辞書の集まり)
data = [
{"名前": "佐藤", "年齢": "22"},
{"名前": "鈴木", "年齢": "35"}
]
with open("output.csv", "w", encoding="utf-8", newline="") as f:
# 最初に列の名前(ヘッダー)を定義します
fieldnames = ["名前", "年齢"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
# 1行目にヘッダーを書き込む
writer.writeheader()
# データをまとめて書き込む
writer.writerows(data)
このように、辞書形式を活用することで「何番目の列だったかな?」と迷う必要がなくなり、効率的なデータ処理が可能になります。
5. CSVファイルを活用する実用的な具体例
CSVファイルは、単にデータを保存するだけでなく、必要な情報だけを効率的に取り出す「データ抽出」の場面で真価を発揮します。例えば、顧客リストや売上データの中から「特定の条件に一致するデータだけ」を別ファイルに保存して、分析や報告書作成に活用するケースが非常に多いです。
ここでは、プログラミング未経験の方でも理解しやすいように、「名簿データから30歳以上の人だけを抽出して、新しいファイルを作成する」というPythonのサンプルコードをご紹介します。
import csv
# 1. 元のファイルを読み込み、保存用のファイルを新しく作ります
with open("sample.csv", "r", encoding="utf-8") as f, \
open("filtered.csv", "w", newline="", encoding="utf-8") as out:
# CSVの中身を辞書形式(列の名前で扱える状態)で読み込みます
reader = csv.DictReader(f)
# 書き込み用の設定を行い、一番上の見出し行を書き込みます
writer = csv.DictWriter(out, fieldnames=reader.fieldnames)
writer.writeheader()
# 2. データを1行ずつチェックして、条件に合うものだけを選別します
for row in reader:
# 「年齢」の項目が30以上の数字だった場合のみ、新しいファイルに書き出します
if int(row["年齢"]) >= 30:
writer.writerow(row)
このプログラムのポイントは、コンピュータに「1行ずつ中身を確認させている」点です。大量のデータが入ったCSVファイルであっても、この数行のコードを実行するだけで、手作業では時間がかかる「フィルタリング作業」を一瞬で終わらせることができます。プログラミングを活用することで、人為的なミスを防ぎつつ、業務の自動化や効率化が実現可能になります。
6. プログラミング未経験者へのアドバイス
CSVはとても汎用的なデータ形式です。まずは自分で小さなCSVファイルを作り、読み書きのコードを試すのがおすすめです。csv.reader()、csv.writer()、DictReader、DictWriterを覚えると、ほとんどのCSV操作ができるようになります。
ファイルを開くときはwith open()を使って閉じ忘れを防ぎましょう。また、文字化け防止のためにencoding="utf-8"をつける習慣をつけると安心です。