見出し画像

CSVデータの読み込み

今日は、『つくってマスターPython』の4-3 “CSVファイルのアクセス”での学びをアウトプットします。

リーダーとライター

CSVモジュールに用意されているのは、「リーダー」「ライター」と呼ばれるオブジェクトと、それらを生成するための関数です。リーダーはデータを読み込むための、ライターはデータを書き出すための機能を扱うオブジェクトです。これらはテキストファイルと同様、openで得られるファイルオブジェクトを使って処理を行います。
1.openでファイルオブジェクトを取得する
2.ファイルオブジェクトからリーダー/ライターのオブジェクトを生成する
3.リーダー/ライターのメソッドを呼び出し、CSVデータを読み書きする
4.ファイルオブジェクトをクローズし、リソースを解放する
ファイルオブジェクトを取得した後、そこからリーダー/ライターのオブジェクトを生成します。そしてこれらのオブジェクトにあるメソッドを使って、CSVのデータを処理していくのです。

CSVデータの読み込み

CSVでは、ファイルオブジェクトからリーダーを作って、データを読み込んでいきます。リーダーのオブジェクトは、csvモジュールのreader関数で作成します。

csv.reader( ファイルオブジェクト )

ファイルオブジェクトは、openの戻り値として得られるものでした。

reader関数の引数にファイルオブジェクトを指定して実行すると、readerオブジェクトが返されます。このreaderは、ファイル内のデータを反復処理するための機能を提供します。これをforなどの繰り返し構文で利用することで、CSVファイルの全データを取り出し処理することができます。
for 変数 in reader:
   ・・・・変数に1行ごとのデータが補完されている・・・・・
readerから取り出された値はリストになっており、その中から各値を取り出すことができます。

CSVファイルを表示する

各教科の名前と点数が入力されたdata,csvを読み込んで、合計と平均を計算して表示する処理を行います。

import csv

try:
   with open('data.csv', mode='r', encoding='utf-8') as f:
       reader = csv.reader(f)
       total = 0
       for r in reader:
           try:
               total += int(r[1])
           except ValueError as v_err:
               print(r)
           print(r[0] + ':' + str(r[1]))
       print('合計:' + str(total))
       print('平均:' + str(total // 5))
except Exception as error:
   print(str(error))
CSVデータは「教科名」「点数」という形になっていますから、r[1]の値をtotalに足していけば合計が計算できます。
ただし、忘れてはいけないのが、「1行目は、各項目のタイトルが書いてある」という点です。したがって、最初の行のr[1]は、数字ではないので足してはいけません。
なので、ここでは「整数に変換するときの例外をtryで処理する」という方法を取りました。数字以外の値だった場合は例外が発生するのでexceptにジャンプします。そこでprintで内容を表示するようにしています。
try:
    total += itn(r[1])
except ValueError as v_err:
    print(r)

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪