【Python】CSVモジュールを使ったCSVファイルの読み込みと書き込みのサンプルコードを解説

作成日: 更新日:

開発環境

  • Python version: python 3.10.11

PythonのCSVモジュールとは

PythonのCSVモジューとルは、CSV(Comma-Separated Values)形式のデータを読み書きするための標準ライブラリです。 CSVは、テキスト形式で表形式のデータを保存するための一般的なフォーマットであり、カンマやタブなどの文字でフィールドを区切ります。 CSVモジュールを使用することで、PythonプログラムでCSVファイルを読み込んだり、CSVファイルにデータを書き込んだりすることができます。 公式ドキュメント:https://docs.python.org/ja/3/library/csv.html

PythonのCSVモジュールの使い方

CSVモジュールには、CSVファイルを処理するための様々な関数やクラスが含まれています。

  • csv.reader(): CSVファイルを読み込んで行ごとに処理するための関数です。
  • csv.writer(): CSVファイルに書き込むための関数です。
  • csv.DictReader(): 辞書形式でCSVファイルを読み込むためのクラスです。
  • csv.DictWriter(): 辞書形式のデータをCSVファイルに書き込むためのクラスです。

これらの関数やクラスを使うことで、CSVファイルの読み込みや書き込みを容易に行うことができます。

PythonのCSVモジュールのサンプルコード

PythonのCSVモジュールのサンプルコードです。 今回は事前に年度別の都道府県の人口推移のCSVファイルを使用しています。

1import csv
2
3# CSVファイルの読み込み
4## CSVファイルを読み込みモードで開く
5date = []
6with open('./prefectures.csv', 'r', newline='', encoding='utf-8') as file:
7    # CSVファイルを読み込むためのreaderを作成
8    reader = csv.reader(file, delimiter=',')
9    # 行ごとに処理
10    for row in reader:
11        date.append(row)
12
13# CSVファイルの書き込み
14## 作成するファイル名を定義する
15file_name_lists = date[0][1:]
16count = 0
17
18for file_name in file_name_lists:
19    write_date = []
20    count += 1
21
22    for row in date:
23        write_date.append([row[0], row[count]])
24
25    with open(file_name+'.csv', 'w', newline='', encoding='utf-8') as file:
26        # CSVファイルを書き込むためのwriterを作成
27        writer = csv.writer(file, delimiter=',')
28        # データをCSVファイルに書き込む
29        writer.writerows(write_date)

最終的に出力されたCSVファイルはこちらからサンプルをダウンロードです。

CSVファイルの読み込み

まずはCSVファイルの読み込み部分のコードを解説していきます。

1with open('./prefectures.csv', 'r', newline='', encoding='utf-8') as file:

まずは、open()関数を使って、prefectures.csvというファイルを読み込みモード ('r') で開いています。 newline=''は、通常の改行コードが使われるように指定し、encoding='utf-8'は、UTF-8エンコーディングを使用してファイルを読み込むことを指定しています。 ファイルを開く際には、with文を使ってコンテキストマネージャを使用しており、これによりファイルが自動的に閉じられるようにしています。

1    reader = csv.reader(file, delimiter=',')

csv.reader()関数を使って、ファイルオブジェクトをCSVファイルを読み込むためのreaderオブジェクトに変換しています。 delimiter=','は、CSVファイルのフィールドを区切る文字を指定しており、ここではカンマが指定されています。

1    for row in reader:
2        date.append(row)

readerオブジェクトを使って、CSVファイルの各行を順に処理し、各行をdateというリストに追加しています。 これにより、CSVファイルの内容がリストとして取得されます。

CSVファイルの書き込み

次にCSVファイルの書き込み部分のコードを解説していきます。

1file_name_lists = date[0][1:]

date[0][1:]で最初の行(インデックス0)から、2番目の要素(インデックス1)以降をfile_name_listsというリストに格納しています。 これは、各列のヘッダーとして使われるファイル名のリストを作成しています。

1for file_name in file_name_lists:
2    write_date = []
3    count += 1
4
5    for row in date:
6        write_date.append([row[0], row[count]])

file_name_listsに含まれる各ファイル名に対して、まずはwrite_dateを初期化してCSVファイルに書き込むデータの格納先を設定します。 次にcount += 1でインデックスcountを1つ増やすことにより、現在処理している列のインデックスを更新しています。 その後、for row in dateでdateリストの各行の処理を実行し、write_dateリストに、各行の1番目の要素(インデックス0)とcountで指定された列の要素をリストとして追加します。 これにより、各行の1番目の要素と現在処理している列の要素がペアとして書き込まれます。 date[0][1:]で最初の行(インデックス0)から、2番目の要素(インデックス1)以降をfile_name_listsというリストに格納しています。 これは、各列のヘッダーとして使われるファイル名のリストを作成しています。

1    with open(file_name+'.csv', 'w', newline='', encoding='utf-8') as file:
2        # CSVファイルを書き込むためのwriterを作成
3        writer = csv.writer(file, delimiter=',')
4        # データをCSVファイルに書き込む
5        writer.writerows(write_date)

open()関数でファイル名を使ってCSVファイルを作成します。 ファイル名ははfile_nameに拡張子.csvを付け加えたもの、ファイルは書き込みモード ('w') で開き、utf-8エンコーディングを使用しています。 csv.writer()関数を使って、ファイルオブジェクトをCSVファイルに書き込むためのwriterオブジェクトに変換します。 delimiter=','は、CSVファイルのフィールドを区切る文字をカンマで指定、writerows()メソッドで各要素をCSVファイルの1行として書き込みます。

まとめ

今回はPythonでCSVモジュールを使ったCSVファイルの操作について解説していきましたが、いかがだったでしょうか。 CSVファイルは様々なツールで使用されているファイル形式なので、pythonで自由に読み込みや書き込みができるようになれば、様々なデータを効率よく処理することができます。 CSVモジュールは非常に便利な標準ライブラリですので、是非、使いこなしていきましょう。

【Python】CSVモジュールを使ったCSVファイルの読み込みと書き込みのサンプルコードを解説 | いっしー@Webエンジニア