从零学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和shell变量互相传递的几种方法
Nov 20 Python
python缩进区别分析
Feb 15 Python
Python中函数的用法实例教程
Sep 08 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
python实现3D地图可视化
Mar 25 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
python识别验证码的思路及解决方案
Sep 13 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 Python
Django框架之路由用法
Jun 10 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制作新闻系统的思路
2006/10/09 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
在CMD命令行中运行python脚本的方法
2018/05/12 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
python程序需要编译吗
2020/06/19 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
小型女装店的创业计划书
2014/01/09 职场文书
小学教师寄语大全
2014/04/03 职场文书
高中课程设置方案
2014/05/28 职场文书
婚内房产协议书范本
2014/10/02 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
环保建议书作文500字
2015/09/14 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android