从零学python系列之数据处理编程实例(二)
在上一节从零学python系列之数据处理编程实例(一)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年月
数据准备:分别建立四个文本文件
james2.txt JamesLee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
julie2.txt JulieJones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
mikey2.txt MikeyMcManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
sarah2.txt SarahSweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
在上一节基础上,修改部分代码,将新要求实现如下:
importos
print(os.getcwd())
os.chdir("C:\Python33\HeadFirstPython\hfpy_code\chapter6") #将工作空间修改为文件所在的目录
#定义函数get_filedata从文件中取值
defget_filedata(filename):
try:
withopen(filename) asf: #with语句打开和自动关闭文件
data=f.readline() #从文件中逐行读取字符
data_list=data.strip().split(",") #将字符间的空格清除后,用逗号分隔字符
return({
"name":data_list.pop(0),
"date_of_birth":data_list.pop(0),
"times":str(sorted(set([modify_time_format(s)forsindata_list]))[0:3])
}) #使用字典将关联的姓名,出生年月,时间键和值进行存储并返回
exceptIOErrorasioerr:
print("FileError"+str(ioerr)) #异常处理,打印错误
return(None)
#定义函数modify_time_format将所有文件中的时分表达方式统一为“分.秒”
defmodify_time_format(time_string):
if"-"intime_string:
splitter="-"
elif":"intime_string:
splitter=":"
else:
splitter="."
(mins,secs)=time_string.split(splitter)#用分隔符splitter分隔字符后分别存入mins和secs
return(mins+"."+secs)
#定义函数get_prev_three返回文件中排名前三的不重复的时间成绩
defget_prev_three(filename):
new_list=[modify_time_format(each_t)foreach_tinget_filedata(filename)] #采用列表推导将统一时分表达方式后的记录生成新的列表
delete_repetition=set(new_list) #采用集合set函数删除新列表中重复项,并生成新的集合
in_order=sorted(delete_repetition) #采用复制排序sorted函数对无重复性的新集合进行排序
return(in_order[0:3])
#输出james的排名前三的不重复成绩和出生年月
james=get_filedata("james2.txt")
print(james["name"]+""sfastesttimesare:"+james["times"])
print(james["name"]+""sbirthdayis:" +james["date_of_birth"])
#输出julie的排名前三的不重复成绩和出生年月
julie=get_filedata("julie2.txt")
print(julie["name"]+""sfastesttimesare:"+julie["times"])
print(julie["name"]+""sbirthdayis:" +julie["date_of_birth"])
#输出mikey的排名前三的不重复成绩和出生年月
mikey=get_filedata("mikey2.txt")
print(mikey["name"]+""sfastesttimesare:"+mikey["times"])
print(mikey["name"]+""sbirthdayis:" +mikey["date_of_birth"])
#输出sarah的排名前三的不重复成绩和出生年月
sarah=get_filedata("sarah2.txt")
print(sarah["name"]+""sfastesttimesare:"+sarah["times"])
print(sarah["name"]+""sbirthdayis:" +sarah["date_of_birth"])
通过建立继承内置list的类AthleteList,将方法定义在类中实现相同功能:
importos
print(os.getcwd())
os.chdir("C:\Python33\HeadFirstPython\hfpy_code\chapter6") #将工作空间修改为文件所在的目录
#定义类AthleteList继承python内置的list
classAthleteList(list):
def__init__(self,name,dob=None,times=[]):
list.__init__([])
self.name=name
self.dob=dob
self.extend(times)
defget_prev_three(self):
return(sorted(set([modify_time_format(t)fortinself]))[0:3])
defget_filedata(filename):
try:
withopen(filename) asf: #with语句打开和自动关闭文件
data=f.readline() #从文件中逐行读取字符
data_list=data.strip().split(",") #将字符间的空格清除后,用逗号分隔字符
return(
AthleteList(data_list.pop(0),data_list.pop(0),data_list)
) #使用字典将关联的姓名,出生年月,时间键和值进行存储并返回
exceptIOErrorasioerr:
print("FileError"+str(ioerr)) #异常处理,打印错误
return(None)
defmodify_time_format(time_string):
if"-"intime_string:
splitter="-"
elif":"intime_string:
splitter=":"
else:
splitter="."
(mins,secs)=time_string.split(splitter)#用分隔符splitter分隔字符后分别存入mins和secs
return(mins+"."+secs)
james=get_filedata("james2.txt")
print(james.name+""sfastesttimesare:"+str(james.get_prev_three()))
julie=get_filedata("julie2.txt")
print(julie.name+""sfastesttimesare:"+str(julie.get_prev_three()))
mikey=get_filedata("mikey2.txt")
print(mikey.name+""sfastesttimesare:"+str(mikey.get_prev_three()))
sarah=get_filedata("sarah2.txt")
print(sarah.name+""sfastesttimesare:"+str(sarah.get_prev_three()))
相关文章
- 快速入门Python机器学习(12)
- python的进制转换器,Python进制转换[通俗易懂]
- python大数据分析实例-用Python整合的大数据分析实例
- python中矩阵的转置_[转]Python中的矩阵转置[通俗易懂]
- python截图识别文字_Python文字截图识别OCR工具实例解析
- 符合python命名规范的标识符是什么_Python标识符命名规范
- python中关于命名的例子_Python 命名规范入门实例「建议收藏」
- python生成器详解_Python 生成器
- Python 技巧篇-pip卸载python库实例演示,查看pip命令大全方法[通俗易懂]
- 遗传算法的应用实例python实现_遗传算法Python解决一个问题
- Python udp编程_python socket udp
- python udp编程_Python核心编程
- python上的表白代码_用Python实现表白代码
- python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」
- python递归函数讲解_Python递归函数实例讲解
- 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数据
- Linux上的Python之旅(linux自带python)
- 使用Python编程连接MySQL数据库(python连mysql)
- 掌握Linux环境下的Python编程(linux执行python)
- 在Linux上学习Python——你的编程之路(linux学python)
- 为什么我从 Python 转战到 Node.js
- Python脚本实现Linux系统管理及自动化部署(python写linux)
- 用Python仿写MSSQL 编程体验更有趣(python仿mssql)
- 从零学python系列之数据处理编程实例(一)
- python多线程用法实例详解
- python网络编程实例简析