この記事では『PythonでCSVファイルを読み込み・書き込みする方法』について、
- Pythonのcsvモジュールとは
- CSVファイルを読み込みする方法
- CSVファイルを書き込みする方法
- 既存のCSVファイルに追記する方法
などをサンプルコードを用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
Pythonのcsvモジュールとは
Pythonには、CSVファイルを操作するための標準ライブラリcsv
があります。csv
モジュールを用いることで、CSVファイルを読み込み・書き込みすることができます。
公式ドキュメント
csv
モジュールの公式ドキュメントのリンクを以下に示します。
この記事では「csv
モジュールを用いてCSVファイルを読み込み・書き込みする方法」を分かりやすく説明しています。csv
モジュールの詳細を知りたい方は、公式ドキュメントをご覧ください。
CSVファイルを読み込みする方法
一例として以下のCSVファイルexample.csv
をcsv
モジュールを用いて読み込んでみましょう。
Name,Age,City
Taro,30,Tokyo
Yuki,25,Osaka
Hiroshi,35,Nagoya
CSVファイルの読み込みにはcsv.reader()
を使います。以下にCSVファイルを読み込むサンプルコードを示します。
# csvモジュールのインポート
import csv
# CSVファイルの読み取り
with open('example.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
# 出力結果
# ['Name', 'Age', 'City']
# ['Taro', '30', 'Tokyo']
# ['Yuki', '25', 'Osaka']
# ['Hiroshi', '35', 'Nagoya']
open()
でCSVファイルを開き、ファイルオブジェクトfile
を作成しています。open()
の第1引数には開くCSVファイルのパス、第2引数には読み込みモードr
を指定します。
csv.reader()
の第一引数に、ファイルオブジェクトfile
を渡すと、reader
オブジェクトを作成することができます。
reader
オブジェクトは行を反復処理するイテレータです。そのため、for
文やnext
関数を用いると、reader
オブジェクトからデータを1行ごとにリストで取得することができます。
上記のサンプルコードでは、for
文でデータを1行ごとにリストで取得しており、row
にはカンマ(,
)で区切られたリストが格納されています。
next関数を用いるサンプルコード
next
関数を用いたサンプルコードを以下に示します。以下のサンプルコードでは、next
関数で最初の1行を読み込み、変数header
に格納しています。その後、for
文を用いて、reader
オブジェクトからデータを1行ごとにリストで取得しています。
# csvモジュールのインポート
import csv
# CSVファイルの読み取り
with open('example.csv', 'r') as file:
reader = csv.reader(file)
# next 関数で最初の1行を読み込んでいる
header = next(reader)
print(header)
for row in reader:
print(row)
# 出力結果
# ['Name', 'Age', 'City']
# ['Taro', '30', 'Tokyo']
# ['Yuki', '25', 'Osaka']
# ['Hiroshi', '35', 'Nagoya']
ファイルを読み込む際のwith構文について
今まで説明したサンプルコードでは、with
構文を用いてファイルを開いています。with
構文を用いると、開いたファイルを閉じる処理を省略することができます(with
構文から抜け出す際にファイルを閉じてくれるため)。with
構文を用いない場合、以下のサンプルコードに示すように閉じる処理が必要です。
# csvモジュールのインポート
import csv
# CSVファイルの読み取り
file = open('example.csv', 'r')
reader = csv.reader(file)
for row in reader:
print(row)
file.close() # ファイルを閉じる処理が必要
# 出力結果
# ['Name', 'Age', 'City']
# ['Taro', '30', 'Tokyo']
# ['Yuki', '25', 'Osaka']
# ['Hiroshi', '35', 'Nagoya']
CSVファイルを書き込みする方法
CSVファイルの書き込みにはcsv.writer()
を使います。以下にCSVファイルを書き込むサンプルコードを示します。
# csvモジュールのインポート
import csv
# CSVファイルに書き込むデータ
data = [
["Name", "Age", "City"],
["Taro", 30, "Tokyo"],
["Yuki", 25, "Osaka"],
["Hiroshi", 35, "Nagoya"]
]
# CSVファイルの作成
with open('example.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)
open()
でCSVファイルを開き、ファイルオブジェクトfile
を作成しています。CSVファイルを新規作成する場合、open()
の第1引数には新規のCSVファイルのパス(このパスにCSVファイルが作成されます)、第2引数には書き込みモードw
を指定します。
既存のCSVファイルに対して、書き込みモードw
を指定すると、上書きされ、元の内容は削除されるので注意してください。CSVファイルを追記する方法は後ほど説明します。
また、open()
の第3引数にはnewline=''
を指定しています。以下の公式ドキュメントに記載されている通り、Windows環境では改行コードが\r\n
なので、行末に余分な\r
が追加されてしまいます。そのため、open()
の第3引数にnewline=''
を指定したほうが安全です(newline=''
を指定しない場合の挙動は後ほど説明します)。
https://docs.python.org/ja/3/library/csv.html#id4
newline=''
が指定されない場合、クォートされたフィールド内の改行は適切に解釈されず、書き込み時に\r\n
を行末に用いる処理系では余分な\r
が追加されてしまいます。csv モジュールは独自 (universal) の改行処理を行うため、newline=''
を指定することは常に安全です。
csv.writer()
の第一引数に、ファイルオブジェクトfile
を渡すと、writer
オブジェクトを作成することができます。writer
オブジェクトのwriterow()
メソッドやwriterows()
メソッドを用いると、CSVファイルにデータを書き込むことができます。writerow()
メソッドの引数には配列を指定し、writerows()
メソッドの引数には二次元配列を指定します。なお、上記のサンプルコードではwriterows()
メソッドのみを使用しています。
next関数を用いるサンプルコード
writerow()
メソッドを用いたサンプルコードを以下に示します。以下のサンプルコードでは、writerow()
メソッドでヘッダーを書き込み、writerows()
メソッドでデータの中身を書き込んでいます。
# csvモジュールのインポート
import csv
# CSVファイルに書き込むデータ
header = ["Name", "Age", "City"]
data = [
["Taro", 30, "Tokyo"],
["Yuki", 25, "Osaka"],
["Hiroshi", 35, "Nagoya"]
]
# CSVファイルの作成
with open('example.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header) # ヘッダーの書き込み
writer.writerows(data) # データの書き込み
CSVファイルを書き込みする際に「newline=''」を指定しない場合
open()
の第3引数にnewline=''
を指定しない場合のサンプルコードを以下に示します。
import csv
# CSVファイルに書き込むデータ
data = [
["Name", "Age", "City"],
["Taro", 30, "Tokyo"],
["Yuki", 25, "Osaka"],
["Hiroshi", 35, "Nagoya"]
]
# CSVファイルの作成
with open('example.csv', 'w') as file:
writer = csv.writer(file)
writer.writerows(data)
Windows環境では改行コードが\r\n
なので、行末に余分な\r
が追加されてしまいます。そのため、Windows環境で上記のサンプルコードを実行し、作成されたCSVファイル(example.csv
)を開くと、以下に示すように余分な改行が追加されてしまいます。
Name,Age,City
Taro,30,Tokyo
Yuki,25,Osaka
Hiroshi,35,Nagoya
既存のCSVファイルに追記する方法
既存のCSVファイルに追記したい場合、open()
の第2引数に追記モードa
を指定します。CSVファイルへの書き込みは新規作成の場合と同じくwriter
オブジェクトのwriterow()
メソッドやwriterows()
メソッドを用います。書き込んだ内容は既存のCSVファイルの末尾に追記されます。
# csvモジュールのインポート
import csv
# CSVファイルに追記するデータ
additional_data = [
["Hanako", 28, "Fukuoka"],
["Kenji", 32, "Sapporo"]
]
# CSVファイルへの追記
with open('example.csv', 'a', newline='') as file:
writer = csv.writer(file)
writer.writerows(additional_data)
本記事のまとめ
この記事では『PythonでCSVファイルを読み込み・書き込みする方法』について、以下の内容を説明しました。
- Pythonのcsvモジュールとは
- CSVファイルを読み込みする方法
- CSVファイルを書き込みする方法
- 既存のCSVファイルに追記する方法
お読み頂きありがとうございました。