PythonでCSVファイルを読み込もう
PythonのプログラムでCSV(Comma Separated Values)ファイルを読み込むには、CSVモジュールを使います。
import csv
CSVファイルのオープン自体は、一般的なファイルと同様にopen()関数を使います。
メモ
open()関数の詳しい使い方は、Python公式サイトのドキュメントを参照してください。
CSVファイルをオープンしたら、CSVモジュールのcsv.reader()を使ってオブジェクトを作ります。
このCSVオブジェクトがCSVファイルの読み込みを制御します。
オブジェクト = csv.reader(CSVファイル[, 初期化パラメータ])
csv.readerの初期化パラメータには、以下のような種類があります。
delimiter | フィールド間を分割するのに用いられる1文字からなる文字列。デフォルトは,(カンマ) |
doublequote | クォートではないquotechar文字をどのようにクォートするか。デフォルトはTrueで"(ダブルクォーテーション)で囲む。Falseはescapechaを前に置く |
escapechar | quotecharをエスケープするための文字。デフォルトはNoneでエスケープはしない |
lineterminator | csv.writerがファイル作る際の各行の改行コード。デフォルトは「\r\n」 |
quotechar | 改行文字を含むフィールドをクォートする時に使う1文字からなる文字列。デフォルトは"(ダブルクォーテーション) |
quoting | クォートがいつcsv.writerによって生成されるか、またcsv.readerによって認識されるかを制御。デフォルトはQUOTE_MINIMAL |
skipinitialspace | Trueの場合、delimiterの直後に続く空白を無視。デフォルトはFalse |
strict | Trueの場合、不正なCSV入力に対してErrorを送出。デフォルトはFalse |
CSVファイルを読み込むプログラム
それでは早速、CSVファイルを読み込む簡単なプログラムを作成しましょう。
読み込むCSVファイルの中身は、以下のようになります。
フィールドをカンマで区切り、それぞれ氏名、国語、数学、英語の点数を表しています。
なお、ファイル名は「file.csv」としています。
1 2 3 |
山田太郎,73,45,38 鈴木花子,80,76,91 佐藤一郎,100,100,100 |
サンプルプログラムは、上記のCSVファイルを読み込み、1行ずつ平均点を計算しながら画面に表示します。
8行目のopen()関数の引数に newline='' を付けていますが、これは改行コードの変換を行わないという指定で、CSVファイルを読み込む時は、このオプションが推奨されています。
20行目の row[1:] は、行の先頭カラムからではなく、2番目のカラムから読み取る指定です。
ちなみに3番目のカラムから読み取りたい場合は、row[2:]と記述します。
なお、csv.readerで読み取った要素は、文字列型になりますので、値を計算したい場合は型を数値型に変換する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import csv # CSVモジュール ### ヘッダ表示 print('氏名 国語 数学 英語 平均点') print('-------- ---- ---- ---- ------') ### CSVファイル読み込み with open('file.csv', newline='') as csvfile: ### CSVオブジェクト作成 csvreader = csv.reader(csvfile) ### 行単位で処理を繰り返し for row in csvreader: ### 合計点初期化 sum = 0 ### 2カラム目から読み取り for col in row[1:]: ### 点数加算 sum += int(col) ### 点数表示 print('{:4} {:>4s} {:>4s} {:>4s} {:5.1f}'.format(row[0], row[1], row[2], row[3], round(sum/3,1))) |
1 2 3 4 5 6 |
> python csv1.py 氏名 国語 数学 英語 平均点 -------- ---- ---- ---- ------ 山田太郎 73 45 38 52.0 鈴木花子 80 76 91 82.3 佐藤一郎 100 100 100 100.0 |
通常のファイル操作に関しては、以下の記事を参照してください。
詳しいCSVモジュールの使い方は、以下の公式ページを参照してください。