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モジュールの使い方は、以下の公式ページを参照してください。