python系列之數據處理編程實例

要求:分別以james,julie,mikey,sarah四個學生的名字建立文本文件,分別存儲各自的成績,時間格式都精確爲分秒,時間越短成績越好,分別輸出每個學生的無重複的前三個最好成績,且分秒的分隔符要統一爲“.”
    數據準備:分別建立四個文本文件
    james.txt    2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
    julie.txt       2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
    mikey.txt     2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
    sarah.txt     2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

import os
os.chdir('D:\python') #將工作空間修改爲文件所在目錄

#定義函數get_filedata從文件中取值

def get_filedata(filename):
	try:
		with open(filename) as f:   #with語句打開和自動關閉文件
		data=f.readline()			#從文件中逐行讀取字符
		return(data.strip().split(','))	#將字符間的空格清除後,用逗號分隔字符
	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) 
 	return(in_order[0:3])


 	#分別輸出對應文件中排名前三的不重複的時間成績

 	print(get_prev_three("james.txt"))
 	print(get_prev_three("julie.txt"))
	print(get_prev_three("mikey.txt"))
	print(get_prev_three("sarah.txt"))


    輸出結果:

    ['2.01', '2.22', '2.34']

    ['2.11', '2.23', '2.59']

    ['2.22', '2.38', '2.49']

    ['2.18', '2.25', '2.39']


要求2

文件中除了學生的成績外,新增了學生姓名和出生年月的信息,因此將要成變成:分別根據姓名輸出每個學生的無重複的前三個最好成績和出生年月

數據準備:建立一個文本文件
              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
 在上一節基礎上,修改部分代碼,將新要求實現如下:

import os
print(os.getcwd())
os.chdir('D:\python\data')

def get_filedata(filename):
	try:
		with open(filename) as f:
			data=f.readline()
			data_list=data.strip().split(',')
			return({
				"name":data_list.pop(0),
				"data_of_birth":data_list.pop(0),
				"times":str(sorted(set([modify_time_format(s) for s in data_list]))[0:3])
				})
			#use dictionary to store the name,data_of_birth,and times
	except IOError as ioerr:
		print('File Error'+ str(ioerr))    
		return(None)


james=get_filedata('james2.txt')
print(james2["name"] + "'s fastest times are:" + james["times"])
print(james["name"]+"'s birthday is" + james["data_of_birth"])


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章