Python で CSV の読み込み
ここでは Python で CSV ファイルからデータを読み込む方法についてご説明します。
サンプル CSV ファイルを準備する
Python で CSV ファイルの読み込みをテストするのに、サンプル CSV ファイルを作っておきます。
次のようなカンマ区切りの学生の成績データを grade.csv という名前で、ファイルを読み込むスクリプトの py ファイルと同じディレクトリに保存しておいてください。
FirstName,LastName,StudentNo,Test1,Test2,Test3,FinalGrade
Ryota,Yamada,SN000001,75,84,67,C
Hanako,Tanaka,SN000002,50,66,44,D
Yuri,Suzuki,SN000003,94,98,93,A
Taichi,Sato,SN000004,83,85,88,B
Hiroki,Takagi,SN000005,92,99,91,A
テキストで見るとちょっとわかりにくいですが、このファイルを Excel で開くとこんな感じです。
Python で CSV ファイルからデータを 1 行リストに読み込む
Python で CSV ファイルからデータを読み込むには csv モジュールの reader() メソッドを使います。
csv.reader(CSV のファイルオブジェクト) のようにすると、reader オブジェクトが取得できます。
デリミターはデフォルトでカンマですが、delimiter 引数で他のデリミター文字を指定することも可能です。
CSV ファイルから 1 行読み込みたい時には next(reader オブジェクト) のようにすると、次の 1 行のデータがリストとして取得できます。
それでは、先ほど作った grade.csv ファイルから 1 行ずつ読み込んでみましょう。
import csv
with open("grade.csv", newline="") as f:
reader = csv.reader(f)
row1 = next(reader)
print(row1)
row2 = next(reader)
print(row2)
実行結果は次のようになり、row1 に 1 行目、row2 に 2 行目がリストとして取得できています。
['FirstName', 'LastName', 'StudentNo', 'Test1', 'Test2', 'Test3', 'FinalGrade']
['Ryota', 'Yamada', 'SN000001', '75', '84', '67', 'C']
CSV ファイルを open する時は、read モードで newline="" を指定します。newline="" を指定しないと、改行に \r\n が使われるシステムでは、余分な改行が入る場合があります。
next() 関数は、next(イテレータ[,デフォルト]) のように使い、デフォルトを指定していない場合はイテレータが全部終わると StopIteration の例外になりますので、お気をつけください。
Python で CSV ファイルからデータを全行リストに読み込む
Python で CSV ファイルからデータを全行読み込みたい時は、csv モジュールの reader() メソッドで reader オブジェクトを取得した後に、for ループを使うと便利です。
grade.csv ファイルから全行リストに読み込むには次のようにできます。
import csv
rows = []
with open("grade.csv", newline="") as f:
reader = csv.reader(f)
for row in reader:
rows.append(row)
print(f"Number of rows: {len(rows)}")
for r in rows:
print(r)
実行結果は次のようになります。
Number of rows: 6
['FirstName', 'LastName', 'StudentNo', 'Test1', 'Test2', 'Test3', 'FinalGrade']
['Ryota', 'Yamada', 'SN000001', '75', '84', '67', 'C']
['Hanako', 'Tanaka', 'SN000002', '50', '66', '44', 'D']
['Yuri', 'Suzuki', 'SN000003', '94', '98', '93', 'A']
['Taichi', 'Sato', 'SN000004', '83', '85', '88', 'B']
['Hiroki', 'Takagi', 'SN000005', '92', '99', '91', 'A']
Python で CSV ファイルのデータを辞書に読み込む
Python で CSV ファイルのデータを辞書に読み込みたい時は、csv モジュールの DictReader() メソッドが使えます。
CSV ファイルの1行目がヘッダー行の場合は、csv.DictReader(CSV のファイルオブジェクト) のようにすると、1 行目のデータをキーにして辞書オブジェクトに map してくれる reader オブジェクトが取得できます。
CSV ファイルにヘッダー行がなくデータ行から始まる場合は、csv.DictReader(CSV のファイルオブジェクト, fieldnames=("fieldName1", "fieldName3", "fieldName3", ...)) のように指定することによって、fieldnames を辞書のキーとして指定することができます。
では、grade.csv ファイルのデータを辞書に読み込んで、FirstName と LastName を出力してみましょう。
import csv
with open("grade.csv", newline="") as f:
dic_reader = csv.DictReader(f)
for row in dic_reader:
print(row["FirstName"], row["LastName"])
実行結果は次のようになります。
Ryota Yamada
Hanako Tanaka
Yuri Suzuki
Taichi Sato
Hiroki Takagi
データにフィールド名でアクセスできて便利ですね!
以上、Python で CSV ファイルからデータを読み込む方法についてご説明しました。