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 ファイルからデータを 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 ファイルからデータを読み込む方法についてご説明しました。

© 2024 やさしい Python 入門