从零学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赋值操作方法分享
Mar 23 Python
python决策树之C4.5算法详解
Dec 20 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
Python列表list排列组合操作示例
Dec 18 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
Python实现图片识别加翻译功能
Dec 26 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
Python logging模块handlers用法详解
Aug 14 Python
Python实现简单猜数字游戏
Feb 03 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/12/06 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
python解析xml文件实例分析
2015/05/27 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
商务英语毕业生自荐信范文
2013/11/08 职场文书
厂长岗位职责
2014/02/19 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
小学运动会开幕词
2015/01/28 职场文书
四年级数学教学反思
2016/02/16 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android