このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】CSVファイルの読み書き

CSVファイルの読み書き
ここでは、Python の標準ライブラリ csv モジュールを用いて、CSV ファイルの読み書きを行う方法について解説します。CSV 形式は、カンマで区切られたシンプルなテキストファイルとして、データの保存や交換に広く利用されています。専用のモジュールを使うことで、手動でテキスト操作を行うよりも簡便かつ安全にデータ処理を実現できます。以下、CSV ファイルの書き出しと読み込みの基本手法を章立てで詳しく見ていきます。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.CSV ファイルの書き出し
1.1. csv モジュールのインポートと open 関数の利用
CSV ファイルにデータを書き込む際は、まず csv モジュールをインポートし、open 関数を利用してファイルをオープンします。open 関数の主要な引数とその意味は、以下の表のとおりです。
引数 | 意味 |
---|---|
ファイル名 | 書き込み対象のファイルのパス(例:"products.csv") |
モード | 'w':書き込み。既存ファイルは上書きされる。'a':追記書き込み |
encoding | ファイルの文字エンコーディング。例:'utf-8' |
newline | 改行コードの出力を制御。空文字列 ('') を指定すると不要な改行を防止 |
次のコード例は、商品名と価格の組み合わせを格納したデータを "products.csv" という CSV ファイルに出力する方法を示しています。
import csv
# 書き込みたいデータ:各タプルは (商品名, 価格) を表す
products = [('book', 300), ('pen', 150), ('notebook', 500)]
# 'w' モードでファイルをオープン
# encoding は 'utf-8'、newline を '' に設定することで余計な改行を防止
with open("products.csv", "w", encoding="utf-8", newline="") as file:
# csv.writer() により書き込み用オブジェクトを作成
writer = csv.writer(file)
# writerows() を使い、リスト内の各タプルを CSV の各行として一括出力
writer.writerows(products)
products.csvの内容
book,300
pen,150
notebook,500
このプログラムでは、with 文を使用することでファイルのオープンからクローズまでを自動管理しています。また、newline オプションを指定することにより、プラットフォームに依存せず正確な改行制御が可能になります。
1.2. writerow メソッドによる1行ずつの書き込み
CSV ファイルへ 1 行ずつデータを追加する場合は、writerow メソッドを利用します。下記の例は、既存の "products.csv" ファイルに新たな商品データを追記する方法です。
import csv
# 追加する商品のデータ: ('pencil', 100)
new_product = ('pencil', 100)
# 'a' モードでファイルをオープン(追記モード)
with open("products.csv", "a", encoding="utf-8", newline="") as file:
writer = csv.writer(file)
# writerow() によりタプル形式のデータを 1 行として書き込む
writer.writerow(new_product)
products.csvの内容
book,300
pen,150
notebook,500
pencil,100
ここでは、'a' モードを使用して既存ファイルに追記している点に注目してください。writerow() は、1 つのイテラブル(リストやタプル)を受け取り、その内容を 1 行として出力します。
2.CSV ファイルの読み込み
2.1. csv.reader を利用した行単位の読み込み
CSV ファイルの内容を読み込むには、csv.reader を利用します。各行はリストとして返され、for 文で反復処理が可能です。次のコードは "products.csv" の各行を読み取り、出力する例です。
import csv
# 'r' モードでファイルをオープン(読み込みモード)
with open("products.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
# reader はイテラブルなオブジェクトとして、各行をリストで返す
for row in reader:
print(row)
実行結果
['book', '300']
['pen', '150']
['notebook', '500']
['pencil', '100']
このコードでは、open 関数でファイルを読み込みモードで開き、csv.reader で各行をリストとして取得しています。print 関数で出力する際、各行がリスト形式で表示されるため、CSV 内の各フィールドが確認できます。
2.2. 読み込んだデータをリストに格納する方法
全ての行をまとめて扱いたい場合は、リスト内包表記を使ってデータを格納することができます。以下の例では、読み込んだ各行をタプルに変換し、リストにまとめています。
import csv
with open("products.csv", "r", encoding="utf-8") as file:
# 各行(リスト)を tuple() でタプルに変換してリストに格納
data = [tuple(row) for row in csv.reader(file)]
print(data)
実行結果
[('book', '300'), ('pen', '150'), ('notebook', '500'), ('pencil', '100')]
このプログラムは、csv.reader によって取得された各行(リスト)を tuple() 関数でタプルに変換し、リスト data に格納しています。これにより、データが変更されない形式で扱えるため、後続の処理に便利です。
まとめ
ここでは、Python 標準ライブラリの csv モジュールを用いた CSV ファイルの書き出しと読み込みについて解説しました。open 関数のオプション(モード、encoding、newline)の役割や、csv.writer の writerows と writerow メソッド、そして csv.reader を用いた行単位の読み込み方法を学びました。これらの基本操作を習得することで、CSV 形式のデータを容易に生成・解析し、さまざまなデータ処理に応用できるようになります。