目的:用一个实例总结学习到的
with
语句,函数,列表推导,集合,排序,
字符分割等内容
要求:分别以
james
,
julie
,
mikey
,
sarah
四个学生的名字建立文本文件,
分别存储各自的成绩,
时间格式都精确为分秒,
时间越短成绩越好,
分别输出每
个学生的无重复的前三个最好成绩,且分秒的分隔符要统一为“
.
”
数据准备:分别建立四个文本文件
james.txt
2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
julie.txt
2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
mikey.txt
2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
sarah.txt
2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
import
os
os.chdir(
'C:\Python33\HeadFirstPython\hfpy_code\chapter5'
)
#
将工作空间修改为文
件所在的目录
#
定义函数
get_filedata
从文件中取值
def
get_filedata(filename):
try
:
with open(filename) as f:
#with
语句打开和自动关闭文件
data=f.readline()
#
从文件中逐行读取字符
return
(data.strip().split(
','
))
#
将字符间的空格清除后,用逗号分隔字符
except
IOError as ioerr:
(
'File Error'
+ str(ioerr))
#
异常处理,打印错误
return
(None)
#
定义函数
modify_time_format
将所有文件中的时分表达方式统一为
“
分
.
秒
”
def
modify_time_format(time_string):
if
"-"
in
time_string:
splitter=
"-"
elif
":"
in
time_string:
splitter=
":"
else
:
splitter=
"."
(mins, secs)=time_string.split(splitter)
#
用分隔符
splitter
分隔字符后分别存入
mins
和
secs
return
(mins+
'.'
+secs)
#
定义函数
get_prev_three
返回文件中排名前三的不重复的时间
成绩
def
get_prev_three(filename):
new_list=[modify_time_format(each_t)
for
each_t
in
get_filedata(filename)]
#
采用列表推导将统一时分表达方式后的记录生成新的列表
delete_repetition=set(new_list)
#
采
用集合
set
函数删除新列表中重复项,并生成新的集合