如何利用Python處理文件中的數(shù)據(jù)?
今天馬哥教育要跟大家分享的文章是如何利用Python處理文件中的數(shù)據(jù)?前面我們學(xué)習(xí)了讀取文件和寫入文件,寫入文件的時候切記你是要用新的內(nèi)容全部覆蓋舊的內(nèi)容還是要續(xù)寫,否則一不小心你就有可能犯下錯誤,今天我們來講一下文件中數(shù)據(jù)的處理。Python入門新手和正在Python學(xué)習(xí)的小伙伴快來看一看吧,希望能夠?qū)Υ蠹矣兴鶐椭?!
前面我們學(xué)習(xí)了讀取文件和寫入文件,寫入文件的時候切記你是要用新的內(nèi)容全部覆蓋舊的內(nèi)容還是要續(xù)寫,否則一不小心你就有可能犯下錯誤,忘記的同學(xué)再去回顧復(fù)習(xí)一下
我們已經(jīng)知道了如何讀取和寫入文件。有了這兩個操作文件的方法,再加上對文件內(nèi)容的處理,就能寫一些小程序,解決不少日常的數(shù)據(jù)處理工作。
比如我現(xiàn)在拿到一份文檔,里面有某個班級里所有學(xué)生的平時作業(yè)成績。因為每個人交作業(yè)的次數(shù)不一樣,所以成績的數(shù)目也不同,沒交作業(yè)的時候就沒有分。我現(xiàn)在需要統(tǒng)計每個學(xué)生的平時作業(yè)總得分。
記得我小的時候,經(jīng)常有同學(xué)被老師喊去做統(tǒng)計分數(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.先把文件讀進來:
f = file('scores.txt')
2.取得文件中的數(shù)據(jù)。因為每一行都是一條學(xué)生成績的記錄,所以用readlines,把每一行分開,便于之后的數(shù)據(jù)處理:
lines = f.readlines() f.close()
提示:在程序中,經(jīng)常使用print來查看數(shù)據(jù)的中間狀態(tài),可以便于你理解程序的運行。比如這里你可以print lines,看一下內(nèi)容被存成了什么格式。
3.對每一條數(shù)據(jù)進行處理。按照空格,把姓名、每次的成績分割開:
for line in lines: data = line.split()
接下來的4、5兩個步驟都是針對一條數(shù)據(jù)的處理,所以都是在for循環(huán)的內(nèi)部。
4.整個程序最核心的部分到了。如何把一個學(xué)生的幾次成績合并,并保存起來呢?我的做法是:對于每一條數(shù)據(jù),都新建一個字符串,把學(xué)生的名字和算好的總成績保存進去。最后再把這些字符串一起保存到文件中:
sum = 0 for score in data[1:]: sum += int(score) result = '%s\t: %d\n' % (data[0], sum)
這里幾個要注意的點:
對于每一行分割的數(shù)據(jù),data[0]是姓名,data[1:]是所有成績組成的列表。
每次循環(huán)中,sum都要先清零。
score是一個字符串,為了做計算,需要轉(zhuǎn)成整數(shù)值int。
result中,我加了一個制表符\t和換行符\n,讓輸出的結(jié)果更好看些。
5.得到一個學(xué)生的總成績后,把它添加到一個list中。
results.append(result)
results需要在循環(huán)之前初始化results = []
6.最后,全部成績處理完畢后,把results中的內(nèi)容保存至文件。因為results是一個字符串組成的list,這里我們直接用writelines方法:
output = file('result.txt', 'w') output.writelines(results) outpus.close()
大功告成,打開文件檢驗一下結(jié)果吧。
以下是完整程序,把其中print前面的注釋符號去掉,可以查看關(guān)鍵步驟的數(shù)據(jù)狀態(tài)。不過因為字符編碼的問題,list的中文可能會顯示為你看不懂的字符。
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: %d\n' % (data[0], sum) #print result results.append(result) #print results output = file('result.txt', 'w') output.writelines(results) output.close()
恭喜你在Python的道路上又堅持了一天,這節(jié)課的內(nèi)容相對來說比較難,不太好消化,尤其是對于前幾節(jié)課沒有練習(xí)的同學(xué),這節(jié)課我們用到了簡單的分割、文件讀取、字符轉(zhuǎn)化、加法運算、寫入文件、創(chuàng)建新文件等內(nèi)容,你可得好好練習(xí)以求理解了,加油!
以上就是馬哥教育今天為大家分享的關(guān)于如何利用Python處理文件中的數(shù)據(jù)的文章,希望本篇文章能夠?qū)φ赑ython學(xué)習(xí)?和從事Python相關(guān)工作的小伙伴們有所幫助,想要了解更多相關(guān)知識記得關(guān)注馬哥教育官網(wǎng),每天都會有大量優(yōu)質(zhì)內(nèi)容與大家分享!
聲明:文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除!