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)
いいなと思ったら応援しよう!
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪