小弟是菜鸡一枚,最近在学习 python ,按着《 Head_First_Python 》中的样例代码一点一点的写,在写到 Chapter 7 的时候遇到一点疑惑,烦请各位大神解答.
问题描述: 这是一个记录运动员姓名,出生日期,以及每次训练成绩的问题, 需要处理的文本文件的格式是酱紫的:
Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
这是其中的一个文件,里面记录的运动员的姓名,出生日期,以及每次训练的成绩(时间),类似的文件总共有四个。
我的问题是,在最后输出阶段, data 是经过程序处理返回的一个字典,里面的 key 是姓名, value 是运动成绩,但是为何可以通过
data[each_athlete].dob
这种方式调用到出生日期呢? 按理说 data 不应该只包含运动员的姓名和成绩吗?
以下是代码:
先是定义了一个类:
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)
然后引用这个类:
import pickle
from athletelist import AthleteList
def get_coach_data(filename):
try:
with open(filename) as f:
data = f.readline()
templ = data.strip().split(',')
return(AthleteList(templ.pop(0),templ.pop(0),templ))
except IOError as ioerr:
print('File error: ' + str(ioerr))
return(None)
def put_to_store(files_list):
all_athletes = {}
for each_file in files_list:
ath = get_coach_data(each_file)
all_athletes[ath.name] = ath
try:
with open('athletes.pickle','wb') as athf:
pickle.dump(all_athletes,athf)
except IOError as ioerr:
print('File error (put_and_store):' + str(ioerr))
return(all_athletes)
def get_from_store():
all_athletes = {}
try:
with open('athletes.pickle','rb') as athf:
all_athletes = pickle.load(athf)
except IOError as ioerr:
print('File error(get_from_store):' + str(ioerr))
return(all_athletes)
然后是输出:
print('-----------------第一段输出------------------------')
the_files = ['sarah2.txt','james2.txt','mikey2.txt','julie2.txt']
data = put_to_store(the_files)
print(data)
第一段输出的结果:
{'Julie Jones': ['2.59', '2.11', '2:11', '2:23', '3-10', '2-23', '3:10', '3.21', '3-21', '3.01', '3.02', '2:59'], 'James Lee': ['2-34', '3:21', '2.34', '2.45', '3.01', '2:01', '2:01', '3:10', '2-22', '2-01', '2.01', '2:16'], 'Sarah Sweeney': ['2:58', '2.58', '2:39', '2-25', '2-55', '2:54', '2.18', '2:55', '2:55', '2:22', '2-21', '2.22'], 'Mikey McManus': ['2:22', '3.01', '3:01', '3.02', '3:02', '3.02', '3:22', '2.49', '2:38', '2:40', '2.22', '2-31']}
print('-----------------第二段输出------------------------')
for each_athlete in data:
print(data[each_athlete].name + ' ' + data[each_athlete].dob)
第二段输出结果:
Julie Jones 2002-8-17
James Lee 2002-3-14
Sarah Sweeney 2002-6-17
Mikey McManus 2002-2-24
print('------------------第三段输出-------------------------')
data_copy = get_from_store()
for each_athlete in data_copy:
print(data_copy[each_athlete].name + ' ' + data_copy[each_athlete].dob)
第三段输出的结果:
Julie Jones 2002-8-17
Sarah Sweeney 2002-6-17
James Lee 2002-3-14
Mikey McManus 2002-2-24
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.