从零学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中的日期时间处理详解
Nov 17 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
浅谈python新式类和旧式类区别
Apr 26 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python 实现dict转json并保存文件
Dec 05 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
利用python 下载bilibili视频
Nov 13 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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/11/19 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python如何实现int函数的方法示例
2018/02/19 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
男方父母证婚词
2014/01/12 职场文书
安全标准化汇报材料
2014/02/03 职场文书
协议书与合同的区别
2014/04/18 职场文书
敬老月活动总结
2014/08/28 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技