掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
背景

Python 最大的優(yōu)勢(shì)是不需編譯,而且代碼簡(jiǎn)潔。我初學(xué) Python 時(shí),被它的簡(jiǎn)潔震驚到了,尤其是文件操作和數(shù)組操作,只需要一行代碼搞定文件讀入,相同功能, Java 的 IO 操作基本上是十行代碼量。所以,偶爾也會(huì)用 Python 做一些小事情。
今天來(lái)整理一個(gè) Python 的練習(xí)題,需求描述如下:
按Q結(jié)束輸入,并將合法輸入的數(shù)據(jù)寫入到一個(gè)文件。
實(shí)現(xiàn)分析
本例用到的知識(shí)點(diǎn):
成績(jī)信息收集
編寫一個(gè) score_writer.py 腳本文件,內(nèi)容如下:
- import re
- try:
- # define file reader
- f1 = open('E:/score.log','w',encoding='utf-8')
- f1.write('name,score\r\n')
- # a pattern check score input
- pattern = "^[0-9]{1,2}(\.[0-9]{1,2})?$"
- print('請(qǐng)輸入姓名和考試成績(jī),按 Q 結(jié)束,成績(jī)范圍 [1-100],最多允許兩位小數(shù)。')
- # receive name
- name = input("姓名:")
- while name != 'Q' and name != 'q' :
- score = input("成績(jī):").strip()
- while re.match(pattern,score)==None and score != '100':
- score = input("成績(jī)不合法,請(qǐng)重新輸入:").strip()
- print(name,':',score)
- f1.write(name+','+score+'\r\n')
- name = input("姓名:")
- print('輸入結(jié)束,存儲(chǔ)數(shù)據(jù)')
- except IOError:
- print("操作異常")
- finally:
- f1.close()
運(yùn)行結(jié)果:
成績(jī)數(shù)據(jù)計(jì)算
編寫一個(gè) score_reader.py 腳本文件,內(nèi)容如下:
- from pandas import DataFrame
- import pandas as pd
- # array to load score
- try:
- # define file reader
- data = pd.read_csv('E:/score.log')
- print(data)
- print('平均值',data['score'].mean(axis = 0))
- print(data['name'][data['score'].idxmax()],' 分?jǐn)?shù)最高:',data['score'].max(axis = 0))
- print(data['name'][data['score'].idxmin()],' 分?jǐn)?shù)最低:',data['score'].min(axis = 0))
- except IOError:
- print("文件不存在")
由于存儲(chǔ)成的是 CVS 文件,標(biāo)題是 name,scroe ,轉(zhuǎn)換成 DataFrame 后計(jì)算最值的索引小標(biāo)后取名字列對(duì)應(yīng)的元素就能輸出最值的姓名了。
換一個(gè)不存在的文件路徑,程序捕獲異常:
編程啟示錄
Python 讀寫文件真是簡(jiǎn)潔呀,兩行代碼搞定,而 Java 要寫幾十行,真是兩個(gè)極端。
想起前兩天看到一個(gè)語(yǔ)言對(duì)比圖:

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流