利用python進(jìn)行文件操作
作者: wyh草樣
出處:https://www.cnblogs.com/wyh0923/p/14084898.html
什么是文件
文件是系統(tǒng)存儲(chǔ)區(qū)域的一個(gè)命名位置,用來(lái)存儲(chǔ)一些信息,便于后續(xù)訪問(wèn)。能夠在非易失性存儲(chǔ)器中實(shí)現(xiàn)持續(xù)性存儲(chǔ),比如在硬盤上。當(dāng)我們要讀取或者寫入文件時(shí),我們需要打開文件;在操作完畢時(shí),我們需要關(guān)閉文件,以便釋放和文件操作相關(guān)的系統(tǒng)資源,因此,文件操作的主要包括以下:
打開文件
讀取或者寫入 關(guān)閉文件 打開文件Python使用內(nèi)置的open()函數(shù)打開一個(gè)文件,并且返回一個(gè)文件對(duì)象,也叫句柄(handle)。
f = open('test.txt') # 在本文件夾下面的一個(gè)文件f = open('C:/Python33/README.txt') # 全路徑
再打開文件時(shí),我們需要指定文件打開的模式,當(dāng)我們需要讀取文件時(shí),使用f = open('test.txt', ’r’),寫入文件時(shí),使用f = open('test.txt', ’w’),追加輸入時(shí)f = open('test.txt', ’a’),這里的a就是append的意思。追加模式和寫入模式的區(qū)別就是,寫入模式打開一個(gè)文件時(shí),無(wú)論這個(gè)文件是否有內(nèi)容,都會(huì)被清空再寫入;在使用追加模式時(shí),打開的文件,只是在原有的內(nèi)容上繼續(xù)進(jìn)行寫入。同時(shí)我們也要制定以文本模式打開還是二進(jìn)制模式打開。
文本模式(text mode)和二進(jìn)制(binary mode)模式的區(qū)別
文本模式中,讀取時(shí)操作系統(tǒng)的換行符(’n’ on Unix,’rn’ on Windows)會(huì)被轉(zhuǎn)換成Python的默認(rèn)換行符n,寫入時(shí)會(huì)將默認(rèn)的換行符轉(zhuǎn)換為操作系統(tǒng)的換行符;在二進(jìn)制模式中不會(huì)轉(zhuǎn)換。這個(gè)轉(zhuǎn)化在對(duì)文本文件沒有影響,但是對(duì)于二進(jìn)制數(shù)據(jù)會(huì)有影響,比如圖像文件或者EXE文件等。因此, 再打開這類文件時(shí),一般使用二進(jìn)制模式進(jìn)行讀寫
常用模式
r 文本模式,讀取 rb 二進(jìn)制模式,讀取 w 文本模式,寫入 wb 二進(jìn)制模式,寫入 a 文本模式,追加 ab 二進(jìn)制模式,追加 + 可讀可寫
f = open('test.txt', ’r’) # 讀模式f = open('test.txt', ’w’) # 寫模式f = open('img.bmp',’r+’) # 可讀可寫f = open('img.bmp',’w+’) # 可讀可寫f = open('img.bmp',’rb’) # 二進(jìn)制讀取
如何關(guān)閉文件
當(dāng)文件操作結(jié)束時(shí),我們最好主動(dòng)關(guān)閉文件。盡管Python有垃圾回收(garbage collector)機(jī)制,去清理不用的對(duì)象,但是最好還是自己關(guān)閉文件。最簡(jiǎn)單的方法就是:
f = open('app.log', ’r’)do_something()f.close()
但是這個(gè)辦法不安全,因?yàn)樵谶M(jìn)行其他操作時(shí),可能會(huì)出現(xiàn)異常,程序退出,那么關(guān)閉文件的語(yǔ)句就不會(huì)被執(zhí)行。因此,可以用語(yǔ)句來(lái)處理:
try: f = open(’app.log’, ’r’) do_something()finally: f.close()
無(wú)論是否發(fā)生異常,關(guān)閉文件的指令都會(huì)被執(zhí)行。但是python官方給出的最佳用法是:
with open(’app.log’, ’r’) as f: do_something()
使用這種用法,我們不必調(diào)用close()方法,在with語(yǔ)句程序內(nèi)部就會(huì)執(zhí)行,無(wú)論內(nèi)部是否出現(xiàn)異常。with語(yǔ)句被稱為上下文管理器,我們可以暫且不管這個(gè)的原理,只需要知道使用with語(yǔ)句,關(guān)閉文件的操作會(huì)被自動(dòng)執(zhí)行,這也是官方推薦的最佳用法,比用語(yǔ)句寫起來(lái)簡(jiǎn)單。
文件操作
寫入文件主要介紹兩個(gè)方法:
1.write()方法這個(gè)方法的參數(shù)是一個(gè)單獨(dú)的字符串,比如:
lines = [’line1’, ’line2’]with open(’filename.txt’, ’w’) as f: s = ’’ for data in lines: s += data s += ’n’ f.write(s)
其實(shí)更好的寫法是使用join函數(shù):
lines = [’line1’, ’line2’]with open(’filename.txt’, ’w’) as f: f.write(’n’.join(lines))
其實(shí)更加優(yōu)雅的寫法,可以使用生成器:
lines = [’line1’, ’line2’]with open(’filename.txt’, ’w’) as f: f.writelines('%sn' % l for l in lines)
讀取文件
這里介紹四種用法,后面都默認(rèn)文件已經(jīng)被打開了:1.read()方法
result = f.read()
這里返回的是文件內(nèi)容,是str類型的結(jié)果,這個(gè)方法還帶一個(gè)數(shù)值類型的參數(shù),指定讀取多少內(nèi)容,如果省略了或者是負(fù)數(shù),那么就返回文件的全部?jī)?nèi)容。2.readline()方法
result = f.readline()
返回的也是字符串,不過(guò)是一行內(nèi)容,繼續(xù)調(diào)用,就會(huì)返回下一行內(nèi)容3.readlines()方法
result = f.readlines()
這里返回的是一個(gè)列表,但是當(dāng)數(shù)據(jù)較大時(shí),這樣的用法會(huì)很占用內(nèi)存,不推薦在數(shù)據(jù)量大時(shí)使用4.直接循環(huán)文件對(duì)象
for line in f: print line do_something()
這樣的用法節(jié)省內(nèi)存,快速,并且代碼還簡(jiǎn)單
result = f.readlines()------------------------result = list(f)
這兩種寫法返回的結(jié)果是一樣的顯然我們推薦第四種用法。
如何處理大文件大文件主要問(wèn)題在于占用內(nèi)存較大,我們不能一下子將文件全部?jī)?nèi)容讀入內(nèi)存,最好的做法如下:
with open('log.txt') as f: for line in f: do_something_with(line)
一行一行讀取,內(nèi)存不會(huì)爆,同時(shí)速度也更快,使用with語(yǔ)句,無(wú)論內(nèi)部是否出現(xiàn)異常,在結(jié)束時(shí),文件對(duì)象都會(huì)被關(guān)閉,因此在處理大文件時(shí),最好這樣來(lái)做。
以上就是利用python進(jìn)行文件操作的詳細(xì)內(nèi)容,更多關(guān)于python 文件操作的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享2. jsp實(shí)現(xiàn)登錄驗(yàn)證的過(guò)濾器3. Xml簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理4. jsp文件下載功能實(shí)現(xiàn)代碼5. 如何在jsp界面中插入圖片6. JSP之表單提交get和post的區(qū)別詳解及實(shí)例7. 詳解瀏覽器的緩存機(jī)制8. vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令9. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程10. phpstudy apache開啟ssi使用詳解
