从零学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正则表达式匹配HTML页面编码
Apr 08 Python
Python中获取对象信息的方法
Apr 27 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
Python API自动化框架总结
Nov 12 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
如何使用repr调试python程序
Feb 28 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
Python绘制动态水球图过程详解
Jun 03 Python
Python下使用Trackbar实现绘图板
Oct 27 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
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
进一步探究Python的装饰器的运用
2015/05/05 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Pyqt5实现英文学习词典
2019/06/24 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python 读取数据库并绘图的实例
2019/12/03 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Python chardet库识别编码原理解析
2020/02/18 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
三星法国官方网站:Samsung法国
2019/10/31 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
少先队学雷锋活动总结范文
2014/03/09 职场文书
五年级学生评语
2014/04/22 职场文书
护理专业自荐书
2014/06/04 职场文书
啦啦队口号大全
2014/06/16 职场文书
奖学金感谢信
2015/01/21 职场文书
幼儿园元旦主持词
2015/07/06 职场文书