PythonでCSVファイルを扱う方法!csvモジュールの基本と活用例
生徒
「先生、Pythonで表のようなデータを扱いたいんですが、どうすればいいですか?」
先生
「いい質問ですね。表のようなデータといえば、CSVファイル(カンマ区切りのテキストファイル)を扱うのが一般的です。Pythonでは、csvモジュールを使えば簡単に操作できますよ。」
生徒
「CSVファイルって、Excelで見るようなあの表みたいなデータのことですか?」
先生
「そうです!Excelでも開けるし、テキストエディタでも読める形式です。PythonでCSVを読み込んだり書き込んだりする方法を一緒に見ていきましょう。」
1. CSVファイルとは?Pythonで扱う前に理解しておこう
CSVファイルとは、Comma Separated Values(カンマ区切り値)の略で、1行が1レコード(データの1行分)を表し、各項目はカンマ(,)で区切られています。たとえば次のような内容です。
名前,年齢,職業
田中,28,エンジニア
佐藤,34,デザイナー
このようなファイルをPythonで処理するときに便利なのが、標準ライブラリのcsvモジュールです。Pythonに最初から入っているので、インストールは不要です。
2. CSVファイルを読み込む基本(csv.reader)
まずは、CSVファイルをPythonで読み込む方法です。ここでは、csv.readerを使います。これは、CSVファイルを1行ずつリストとして読み取る関数です。
import csv
# CSVファイルを開く
with open("sample.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
with open()はファイルを開く構文で、使い終わったあと自動的に閉じてくれます。これを「コンテキストマネージャ」と呼びます。少し難しい言葉ですが、「自動で片付けてくれる仕組み」と覚えておけばOKです。
このプログラムを実行すると、次のような出力になります。
['名前', '年齢', '職業']
['田中', '28', 'エンジニア']
['佐藤', '34', 'デザイナー']
1行ごとにリスト(配列のようなもの)として読み取られているのが分かります。
3. 辞書型で読み取る(csv.DictReader)
リストだと「列の名前」が分かりにくいですよね。そんなときはcsv.DictReaderを使います。これは1行を辞書(dict)として扱える方法です。
import csv
with open("sample.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
print(row["名前"], row["職業"])
田中 エンジニア
佐藤 デザイナー
列名をキーとして指定できるので、コードが読みやすくなります。CSVファイルの1行目を自動的にヘッダー(列名)として認識してくれるのも便利なポイントです。
4. CSVファイルに書き込む(csv.writer)
次は、CSVファイルにデータを書き込む方法です。csv.writerを使うと、簡単にファイルを作成できます。
import csv
# 新しいCSVファイルを作成
with open("output.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["名前", "年齢", "職業"])
writer.writerow(["鈴木", 25, "プログラマー"])
writer.writerow(["山田", 30, "データサイエンティスト"])
writer.writerow()は1行分を書き込む関数です。複数行を書き込みたい場合は、次のようにwriterows()を使うと便利です。
rows = [
["名前", "年齢", "職業"],
["鈴木", 25, "プログラマー"],
["山田", 30, "データサイエンティスト"]
]
with open("output.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(rows)
ファイルを開くときにnewline=""を指定しているのは、Windows環境で改行が2重にならないようにするための設定です。
5. 辞書型でCSVに書き込む(csv.DictWriter)
csv.DictWriterを使えば、辞書のデータをCSVに出力できます。キーと列名を対応させることで、より分かりやすくデータを書けます。
import csv
data = [
{"名前": "田中", "年齢": 28, "職業": "エンジニア"},
{"名前": "佐藤", "年齢": 34, "職業": "デザイナー"}
]
with open("people.csv", "w", newline="", encoding="utf-8") as file:
fieldnames = ["名前", "年齢", "職業"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
名前,年齢,職業
田中,28,エンジニア
佐藤,34,デザイナー
writeheader()でヘッダー行を書き込み、writerows()で複数の辞書データをまとめて出力します。データの追加や並び替えが必要なときにも便利です。
6. CSVモジュールを使うときの注意点と便利な使い方
PythonでCSVを扱うときによくある注意点も知っておきましょう。
- 文字コード(encoding)は
utf-8を使うのがおすすめ。日本語の文字化けを防げます。 - ファイルを開くときは
withを使うことで、自動で閉じてくれます。 - 改行コードの違いで、環境によって1行空くことがあるので、
newline=""を指定しましょう。
また、CSVデータを加工したり分析したりする際には、csvモジュールで読み込んだデータをリストや辞書として扱えるので、Pythonのデータ処理力を活かせます。たとえば、年齢の平均を計算したり、特定の職業だけを抽出したりも簡単に行えます。