【Head First Python-第六章-カスタムデータオブジェクト】学習ノート

3547 ワード

1.ディクショナリ-内蔵のデータ構造で、データ値をキーに関連付けることができ、2つの方法で作成できます.
2.classキーワードはクラスを定義し、クラスメソッドパラメータの最初のクラスはselfでなければならない.
コード:
使用するtxtファイル:sarah.txt
Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

クラス:Athlete.py
import sanitize
#11111111111111    
"""
class Athlete:
    def __init__(self, a_name, a_dob = None, a_times = []):
        self.name = a_name
        self.dob = a_dob
        self.times = a_times

    def top3(self):
        return(sorted(set([sanitize.sanitize(t) for t in self.times]))[0:3])

    def add_time(self, time_value):
        self.times.append(time_value)

    def add_times(self, list_of_times):
        self.times.extend(list_of_times)
"""
#2222222222       
class AthleteList(list):
    def __init__(self, a_name, a_dob = None, a_times = []):
        list.__init__([])
        self.name = a_name
        self.dob = a_dob
        self.extend(a_times)

    def top3(self):
        return(sorted(set([sanitize.sanitize(t) for t in self]))[0:3]) #             

データ取得関数:getData.py
#from Athlete import Athlete  #         
from Athlete import AthleteList #        
#1111111         
"""
import sanitize
def get_coach_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(',')  #        
        return({'Name':templ.pop(0),
                'DOB':templ.pop(0),
                'Times':str(sorted(set([sanitize.sanitize(t) for t in templ]))[0:3])})
    except IOError as ioerr:
        print('File error:' + str(ioerr))
        return(None)
"""

#2222222        
def get_coach_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(',')  #        
        #return(Athlete(templ.pop(0), templ.pop(0), templ))  #       
        return(AthleteList(templ.pop(0), templ.pop(0), templ)) #          
    except IOError as ioerr:
        print('File error:' + str(ioerr))
        return(None)

主関数:dataProce.py
import getData
import sanitize
import os
os.chdir('C:/Users/Administrator/Desktop/HeadFirstPython/chapter6')
sarah = getData.get_coach_data('sarah.txt')
#11111111    
"""
(sarah_name, sarah_dob) = sarah.pop(0), sarah.pop(0)
print(sarah_name + "'s fastest times are:" +
      str(sorted(set([sanitize.sanitize(t) for t in sarah]))[0:3]))
"""
#22222222         
""""
sarah_data = {}
sarah_data['Name'] = sarah.pop(0)
sarah_data['DOB'] = sarah.pop(0)
sarah_data['Times'] = sarah
print(sarah_data['Name'] + "'s fastest times are:" +
      str(sorted(set([sanitize.sanitize(t) for t in sarah_data['Times']]))[0:3]))
"""
#33333333             
"""
print(sarah['Name'] + "'s fastest times are:" + sarah['Times'])
"""
#44444444  Athlete       
print(sarah.name + "'s fastest times are:" + str(sarah.top3()))

データフォーマット処理関数:sanitize.py
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)