第4回基礎から学ぶPython入門ーCSVファイル読込 後編ー

どうもKuboです。

前回中途半端で終わってしまったCSVファイルの読込処理ですが、今回ついに完結です!(予定)

今回は前回紹介したコードを元に説明しますので良かったら前回のページも合わせてみてください。

https://www.wow-creators.com/2019/06/14/%E7%AC%AC4%E5%9B%9E%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6python%E5%85%A5%E9%96%80/

スポンサーリンク

解説つづき

前回は、プログラムに引数を渡して受け取った引数が正しいかバリデート処理を説明しました。

今回は、その続きから

CSVファイルを開く

#ファイルを開く
csv_file = open(args[1], "r", encoding="utf_8")

受け取ったファイルが存在することはパリデート処理で確認が取れているので組み込み関数のopen()でファイルを開きます。

open()の引数

open()の引数に関しては公式ドキュメントには以下の様に記載されています。

open(filemode=’r’buffering=-1encoding=Noneerrors=Nonenewline=Noneclosefd=Trueopener=None)

今回注目して欲しいのは、引数の中でmode='r'の様にイコールが書かれているものです。これは引数が指定されていない場合にデフォルトの値が指定されている引数です。

デフォルトの値が指定されているとは、プログラム実行時に引数を渡さなくてもデフォルトの値でプログラムが動くということです。今回の場合は、mode='r'と記載されているのでファイルを読取り専用モードで開くと指定されていることになります。

逆にファイルに書き込みを行う場合は、”w”の様に引数を指定しないと書き込みが出来ません。

以下公式ドキュメントです。

組み込み関数 — Python 3.7.4 ドキュメント

引数を途中から指定する場合

続いてコード側でencoding="utf_8"で引数を渡している点に注目してください。

通常引数を渡して第1引数、第2引数の様に引数を順番に渡している場合は必要ないですが、第3引数のbufferingを指定する必要がない場合に第4引数の引数名=値という形で渡すことで引数と値を紐付ける必要があります。

CSVファイルを辞書型の変数に変換

続いて開いたCSVファイルを変数に展開します。

#辞書形式に展開
csv_dict = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

辞書型の変数

辞書型の変数とは、前編で紹介したリスト型に似ています。違いと言うとKeyと呼ばれるラベル付きで管理されている点です。

展開された変数を1行print()で表示してみます。

{'生年月日': '1976/03/17', '年齢': '43', '氏名(カタカナ)': 'オダカセレン', '点数': '16', '氏名': '小高晴廉', '連番': '1', '性別': '男'}

見て頂けるとわかると思いますが、CSVの1行目のヘッダー行の名称と値が紐付けて変数に格納されています。

a

#ヘッダー出力
print('氏名'.ljust(10) + "\t性別\t年齢\t点数" )
print('-------------------------------------' )

#1行づつループ
for row in csv_dict:

  #第2引数の数値以上のみprint
  if int( row['点数'] ) >= int(args[2])  :
    print( row['氏名'].ljust(10) + "\t" + row['性別'] + "\t" +  row['年齢'] + "\t" + row['点数'].rjust(3) )

ヘッダーの出力

結果を見やすくするためにヘッダーを出力します。

ここは特段言うことないですなのであえて宣伝

1行づつループ

ファイルの1行目から1行づつループを行ないます。

その中で”点数”が引数2の値以上の値は、print()を行っています。

 

以上で前編で紹介したコードの解説とします。

不明な点があったらコメントなど頂いたらお答えしますのでよろしくお願いします。

 

Kuboでした。

 

コメント

タイトルとURLをコピーしました