从零学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设置tmpfs来加速项目的教程
Apr 17 Python
Python的函数的一些高阶特性
Apr 27 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
python函数与方法的区别总结
Jun 23 Python
python pandas生成时间列表
Jun 29 Python
python虚拟环境完美部署教程
Aug 06 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
python机器学习库xgboost的使用
Jan 20 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 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读取和编写XML DOM的实现代码
2011/02/03 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
js获取Get值的方法
2016/09/29 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
应聘自荐信
2013/12/14 职场文书
小学家长评语大全
2014/04/16 职场文书
仓库管理计划书
2014/05/04 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
医院员工辞职信范文
2015/05/12 职场文书
运动会5000米加油稿
2015/07/21 职场文书
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python