从零学python系列之数据处理编程实例(二)


Posted in Python onMay 22, 2014

在上一节从零学python系列之数据处理编程实例(一)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年月

数据准备:分别建立四个文本文件

              james2.txt     James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22

              julie2.txt        Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21

              mikey2.txt      Mikey McManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

              sarah2.txt      Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

 在上一节基础上,修改部分代码,将新要求实现如下:

import os
print(os.getcwd())
os.chdir('C:\Python33\HeadFirstPython\hfpy_code\chapter6')  #将工作空间修改为文件所在的目录
#定义函数get_filedata从文件中取值
def get_filedata(filename):
    try:
        with open(filename)  as f:        #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) for s in data_list]))[0:3])
                    })                                #使用字典将关联的姓名,出生年月,时间键和值进行存储并返回
    except IOError as ioerr:
        print ('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函数删除新列表中重复项,并生成新的集合
    in_order=sorted(delete_repetition)                                                               #采用复制排序sorted函数对无重复性的新集合进行排序
    return (in_order[0:3])      
#输出james的排名前三的不重复成绩和出生年月
james = get_filedata('james2.txt')
print (james["name"]+"'s fastest times are: " + james["times"])
print (james["name"] + "'s birthday is: "  + james["date_of_birth"])
#输出julie的排名前三的不重复成绩和出生年月
julie = get_filedata('julie2.txt')
print (julie["name"]+"'s fastest times are: " + julie["times"])
print (julie["name"] + "'s birthday is: "  + julie["date_of_birth"])
#输出mikey的排名前三的不重复成绩和出生年月
mikey = get_filedata('mikey2.txt')
print (mikey["name"]+"'s fastest times are: " + mikey["times"])
print (mikey["name"] + "'s birthday is: "  + mikey["date_of_birth"])
#输出sarah的排名前三的不重复成绩和出生年月
sarah = get_filedata('sarah2.txt')
print (sarah["name"]+"'s fastest times are: " + sarah["times"])
print (sarah["name"] + "'s birthday is: "  + sarah["date_of_birth"])

通过建立继承内置list的类AthleteList,将方法定义在类中实现相同功能:

import os
print(os.getcwd())
os.chdir('C:\Python33\HeadFirstPython\hfpy_code\chapter6')  #将工作空间修改为文件所在的目录
#定义类AthleteList继承python内置的list
class AthleteList(list):
    def __init__(self, name, dob=None, times=[]):
        list.__init__([])
        self.name=name
        self.dob=dob
        self.extend(times)
    def get_prev_three(self):
        return (sorted(set([modify_time_format(t) for t in self]))[0:3])
def get_filedata(filename):
    try:
        with open(filename)  as f:        #with语句打开和自动关闭文件
            data=f.readline()                 #从文件中逐行读取字符
            data_list=data.strip().split(',')   #将字符间的空格清除后,用逗号分隔字符
            return(
                   AthleteList(data_list.pop(0), data_list.pop(0), data_list)
                   )                                #使用字典将关联的姓名,出生年月,时间键和值进行存储并返回
    except IOError as ioerr:
        print ('File Error' + str(ioerr))     #异常处理,打印错误
        return (None)
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)
james = get_filedata('james2.txt')
print (james.name+"'s fastest times are: " + str(james.get_prev_three()))
julie = get_filedata('julie2.txt')
print (julie.name+"'s fastest times are: " + str(julie.get_prev_three()))
mikey = get_filedata('mikey2.txt')
print (mikey.name+"'s fastest times are: " + str(mikey.get_prev_three()))
sarah = get_filedata('sarah2.txt')
print (sarah.name+"'s fastest times are: " + str(sarah.get_prev_three()))
Python 相关文章推荐
复制粘贴功能的Python程序
Apr 04 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
十个Python程序员易犯的错误
Dec 15 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
python基于Selenium的web自动化框架
Jul 14 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
从零学python系列之数据处理编程实例(一)
May 22 #Python
Python学习笔记_数据排序方法
May 22 #Python
从零学Python之hello world
May 21 #Python
Python开发实例分享bt种子爬虫程序和种子解析
May 21 #Python
从零学Python之引用和类属性的初步理解
May 15 #Python
python中xrange和range的区别
May 13 #Python
Python中os和shutil模块实用方法集锦
May 13 #Python
You might like
php中mysql操作buffer用法详解
2015/03/19 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python爬虫常用的模块分析
2014/08/29 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
班组长安全生产职责
2013/12/16 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
工业设计专业自荐书
2014/06/05 职场文书
品质口号大全
2014/06/17 职场文书
优秀教师先进材料
2014/12/16 职场文书
工作失误检讨书
2015/01/26 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python