回答例(基本問題0501)

[ edit ]

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 # ==============================================================================
   4 # * Copyright (c) 2018 IIJIMA, Tadashi
   5 # *       (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
   6 # ==============================================================================
   7 # ソフトウェア工学[11] 例題[05]-(002a)  BP_05_002a_prefecture_info.py
   8 # BP(Basic Problem) 05-002a: 都道府県ごとの統計(面積,人口,人口密度)
   9 #        2018-12-19 飯島 正 (iijima@ae.keio.ac.jp)
  10 # ==============================================================================
  11 import csv
  12 # ==============================================================================
  13 # --- 関数定義: 文字列からカンマを取り除きます
  14 # ※もし,replaceというメソッドを知っているなら,それで簡潔に定義できます.
  15 # ※ 例えば,"212,111,105".replace( "'", "" )でも,カンマを取り除くことができます.
  16 def remove_comma( s ):
  17     t = ""
  18     for c in s:
  19         if not c == ",":
  20             t += c
  21     return( t )
  22 # ==============================================================================
  23 # ===== 【メイン・プログラム】 =====
  24 # ----- オープニングメッセージ -----
  25 print( "CSVファイルから文字列を読み込みます: " )
  26 print( "    ※csvモジュールを使います." )
  27 print( "    ※with文を使うと,ブロックを抜けるときに自動的にcloseします" )
  28 print()
  29 # ==============================================================================
  30 ## ----- ファイル名 -----
  31 input_file_name = "prefecture_data_2015a-processed.csv"
  32 # ==============================================================================
  33 pref_info=list()
  34 ## ----- ファイルをオープンします(モードを省略すると読み込み) -----
  35 with open( input_file_name ) as f:
  36     ## ----- csvリーダーを取得します -----
  37     reader = csv.reader( f )
  38     ## ----- 1行目をヘッダ行として読み飛ばす場合 -----
  39     header = next(reader)
  40     header = next(reader)
  41     ## ----- csvリーダーオブジェクトでループします -----
  42     for line in reader:
  43         print( line )
  44         density1 = int(int(remove_comma(line[2]))/float(remove_comma(line[3]))*10)/10
  45         density2 = float( remove_comma(line[4]))
  46         pref_info.append( (line[1], density1,density2))
  47 # ※本当は,人口密度を計算したものと計算した値を比較した結果と,
  48 # ※大きい順番に並べ替えたものをファイルに保存してほしいところですが,
  49 # ※授業中に示したのは,とりあえず人口密度を計算して画面に表示するところまでなので,
  50 # ※そこまでとします.
  51 print( pref_info)
  52 
  53 # ==============================================================================

SoftEng: BP0502 (last edited 2018-12-25 07:26:13 by TadashiIijima)