【Head First Python-第六章-カスタムデータオブジェクト】学習ノート
3547 ワード
1.ディクショナリ-内蔵のデータ構造で、データ値をキーに関連付けることができ、2つの方法で作成できます.
2.classキーワードはクラスを定義し、クラスメソッドパラメータの最初のクラスはselfでなければならない.
コード:
使用するtxtファイル:sarah.txt
クラス:Athlete.py
データ取得関数:getData.py
主関数:dataProce.py
データフォーマット処理関数:sanitize.py
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)