亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

自學(xué)Python編程【第三十一節(jié)】處理文件中的數(shù)據(jù)

哈嘍,同學(xué)們!歡迎您來到Python編程課堂,前面我們學(xué)習(xí)了讀取文件寫入文件,寫入文件的時(shí)候切記你是要用新的內(nèi)容全部覆蓋舊的內(nèi)容還是要續(xù)寫,否則一不小心你就有可能犯下錯(cuò)誤,忘記的同學(xué)再去回顧復(fù)習(xí)一下,今天我們來學(xué)習(xí)如何利用Python處理文件中的數(shù)據(jù)。

處理文件中的數(shù)據(jù)

我們已經(jīng)知道了如何讀取和寫入文件。有了這兩個(gè)操作文件的方法,再加上對(duì)文件內(nèi)容的處理,就能寫一些小程序,解決不少日常的數(shù)據(jù)處理工作。

比如我現(xiàn)在拿到一份文檔,里面有某個(gè)班級(jí)里所有學(xué)生的平時(shí)作業(yè)成績。因?yàn)槊總€(gè)人交作業(yè)的次數(shù)不一樣,所以成績的數(shù)目也不同,沒交作業(yè)的時(shí)候就沒有分。我現(xiàn)在需要統(tǒng)計(jì)每個(gè)學(xué)生的平時(shí)作業(yè)總得分。

記得我小的時(shí)候,經(jīng)常有同學(xué)被老師喊去做統(tǒng)計(jì)分?jǐn)?shù)這種“苦力”?,F(xiàn)在電腦普及了,再這么干就太弱了。用Python,幾行代碼就可以搞定。

看一下我們的文檔里的數(shù)據(jù):

#-- scores.txt

劉備 23 35 44 47 51

關(guān)羽 60 77 68

張飛 97 99 89 91

諸葛亮 100

1.先把文件讀進(jìn)來:

f = file('scores.txt')

2.取得文件中的數(shù)據(jù)。因?yàn)槊恳恍卸际且粭l學(xué)生成績的記錄,所以用readlines,把每一行分開,便于之后的數(shù)據(jù)處理:

lines = f.readlines() 
f.close()

提示:在程序中,經(jīng)常使用print來查看數(shù)據(jù)的中間狀態(tài),可以便于你理解程序的運(yùn)行。比如這里你可以print lines,看一下內(nèi)容被存成了什么格式。

3.對(duì)每一條數(shù)據(jù)進(jìn)行處理。按照空格,把姓名、每次的成績分割開:

for line in lines: 
data = line.split()

接下來的4、5兩個(gè)步驟都是針對(duì)一條數(shù)據(jù)的處理,所以都是在for循環(huán)的內(nèi)部。

4.整個(gè)程序最核心的部分到了。如何把一個(gè)學(xué)生的幾次成績合并,并保存起來呢?我的做法是:對(duì)于每一條數(shù)據(jù),都新建一個(gè)字符串,把學(xué)生的名字和算好的總成績保存進(jìn)去。最后再把這些字符串一起保存到文件中:

sum = 0 
for score in data[1:]:
sum += int(score)
result = '%st: %dn' % (data[0], sum)

這里幾個(gè)要注意的點(diǎn):

對(duì)于每一行分割的數(shù)據(jù),data[0]是姓名,data[1:]是所有成績組成的列表。

每次循環(huán)中,sum都要先清零。

score是一個(gè)字符串,為了做計(jì)算,需要轉(zhuǎn)成整數(shù)值int。

result中,我加了一個(gè)制表符t和換行符n,讓輸出的結(jié)果更好看些。

5.得到一個(gè)學(xué)生的總成績后,把它添加到一個(gè)list中。

results.append(result)

results需要在循環(huán)之前初始化results = []

6.最后,全部成績處理完畢后,把results中的內(nèi)容保存至文件。因?yàn)閞esults是一個(gè)字符串組成的list,這里我們直接用writelines方法:

output = file('result.txt', 'w') 
output.writelines(results)
outpus.close()

大功告成,打開文件檢驗(yàn)一下結(jié)果吧。

以下是完整程序,把其中print前面的注釋符號(hào)去掉,可以查看關(guān)鍵步驟的數(shù)據(jù)狀態(tài)。不過因?yàn)樽址幋a的問題,list的中文可能會(huì)顯示為你看不懂的字符。

f = file('scores.txt') 
lines = f.readlines()
#print lines
f.close()
results = []
for line in lines:
#print line
data = line.split()
#print data
sum = 0
for score in data[1:]:
sum += int(score)
result = '%s t: %dn' % (data[0], sum)
#print result
results.append(result)
#print results
output = file('result.txt', 'w')
output.writelines(results)
output.close()

恭喜你在Python自學(xué)的道路上又堅(jiān)持了一天,這節(jié)課的內(nèi)容相對(duì)來說比較難,不太好消化,尤其是對(duì)于前幾節(jié)課沒有練習(xí)的同學(xué),這節(jié)課我們用到了簡單的分割、文件讀取、字符轉(zhuǎn)化、加法運(yùn)算、寫入文件、創(chuàng)建新文件等內(nèi)容,你可得好好練習(xí)以求理解了,加油!

好啦,今天的分享到這里就結(jié)束了,希望大家能夠持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量優(yōu)質(zhì)內(nèi)容與大家分享!

聲明:文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!