從零學(xué)python系列之?dāng)?shù)據(jù)處理編程實例(二)
在上一節(jié)從零學(xué)python系列之?dāng)?shù)據(jù)處理編程實例(一)的基礎(chǔ)上數(shù)據(jù)發(fā)生了變化,文件中除了學(xué)生的成績外,新增了學(xué)生姓名和出生年月的信息,因此將要成變成:分別根據(jù)姓名輸出每個學(xué)生的無重復(fù)的前三個最好成績和出生年月
數(shù)據(jù)準(zhǔn)備:分別建立四個文本文件
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
在上一節(jié)基礎(chǔ)上,修改部分代碼,將新要求實現(xiàn)如下:
import os
print(os.getcwd())
os.chdir('C:\Python33\HeadFirstPython\hfpy_code\chapter6') #將工作空間修改為文件所在的目錄
#定義函數(shù)get_filedata從文件中取值
def get_filedata(filename):
try:
with open(filename) as f: #with語句打開和自動關(guān)閉文件
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])
}) #使用字典將關(guān)聯(lián)的姓名,出生年月,時間鍵和值進(jìn)行存儲并返回
except IOError as ioerr:
print ('File Error' + str(ioerr)) #異常處理,打印錯誤
return (None)
#定義函數(shù)modify_time_format將所有文件中的時分表達(dá)方式統(tǒng)一為“分.秒”
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)
#定義函數(shù)get_prev_three返回文件中排名前三的不重復(fù)的時間成績
def get_prev_three(filename):
new_list=[modify_time_format(each_t) for each_t in get_filedata(filename)] #采用列表推導(dǎo)將統(tǒng)一時分表達(dá)方式后的記錄生成新的列表
delete_repetition=set(new_list) #采用集合set函數(shù)刪除新列表中重復(fù)項,并生成新的集合
in_order=sorted(delete_repetition) #采用復(fù)制排序sorted函數(shù)對無重復(fù)性的新集合進(jìn)行排序
return (in_order[0:3])
#輸出james的排名前三的不重復(fù)成績和出生年月
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的排名前三的不重復(fù)成績和出生年月
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的排名前三的不重復(fù)成績和出生年月
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的排名前三的不重復(fù)成績和出生年月
sarah = get_filedata('sarah2.txt')
print (sarah["name"]+"'s fastest times are: " + sarah["times"])
print (sarah["name"] + "'s birthday is: " + sarah["date_of_birth"])
通過建立繼承內(nèi)置list的類AthleteList,將方法定義在類中實現(xiàn)相同功能:
import os
print(os.getcwd())
os.chdir('C:\Python33\HeadFirstPython\hfpy_code\chapter6') #將工作空間修改為文件所在的目錄
#定義類AthleteList繼承python內(nèi)置的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語句打開和自動關(guān)閉文件
data=f.readline() #從文件中逐行讀取字符
data_list=data.strip().split(',') #將字符間的空格清除后,用逗號分隔字符
return(
AthleteList(data_list.pop(0), data_list.pop(0), data_list)
) #使用字典將關(guān)聯(lián)的姓名,出生年月,時間鍵和值進(jìn)行存儲并返回
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 .txt文件讀取及數(shù)據(jù)處理方法總結(jié)
- python數(shù)據(jù)處理實戰(zhàn)(必看篇)
- 從零學(xué)python系列之?dāng)?shù)據(jù)處理編程實例(一)
- 基于python爬蟲數(shù)據(jù)處理(詳解)
- Python數(shù)據(jù)處理numpy.median的實例講解
- Python 數(shù)據(jù)處理庫 pandas 入門教程基本操作
- 對python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解
- python實現(xiàn)爬蟲統(tǒng)計學(xué)校BBS男女比例之?dāng)?shù)據(jù)處理(三)
- python 解決動態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理)
- python文本數(shù)據(jù)處理學(xué)習(xí)筆記詳解
相關(guān)文章
win系統(tǒng)下為Python3.5安裝flask-mongoengine 庫
MongoEngine 是一個用來操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以參考 Flask-SQLAlchemy 一節(jié)。在 Flask 中,我們可以直接使用 MongoEngine,也可使用 Flask-MongoEngine ,它使得在 Flask 中使用 MongoEngine 變得更加簡單。2016-12-12python PIL/cv2/base64相互轉(zhuǎn)換實例
今天小編就為大家分享一篇python PIL/cv2/base64相互轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python中的try except與R語言中的tryCatch異常解決
這篇文章主要為大家介紹了python中的try except與R語言中的tryCatch異常解決的方式及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11