您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Python中的 read函數(shù)如何按字節(jié)(字符)讀取文件,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
文件對(duì)象提供了 read() 方法來(lái)按字節(jié)或字符讀取文件內(nèi)容,到底是讀取宇節(jié)還是字符,則取決于是否使用了 b 模式,如果使用了 b 模式,則每次讀取一個(gè)字節(jié);如果沒(méi)有使用 b 模式,則每次讀取一個(gè)字符。在調(diào)用該方法時(shí)可傳入一個(gè)整數(shù)作為參數(shù),用于指定最多讀取多少個(gè)字節(jié)或宇符。
例如,如下程序采用循環(huán)讀取整個(gè)文件的內(nèi)容:
f = open("read_test.py", 'r', True) while True: # 每次讀取一個(gè)字符 ch = f.read(1) # 如果沒(méi)有讀到數(shù)據(jù),跳出循環(huán) if not ch: break # 輸出ch print(ch, end='') f.close()
上面程序采用循環(huán)依次讀取每一個(gè)字符(因?yàn)槌绦驔](méi)有使用 b 模式),每讀取到一個(gè)字符,程序就輸出該字符。
正如從上面程序所看到的,當(dāng)程序讀寫(xiě)完文件之后,推薦立即調(diào)用 close() 方法來(lái)關(guān)閉文件,這樣可以避免資源泄露。如果需要更安全地關(guān)閉文件,推薦將關(guān)閉文件的 close() 方法調(diào)用在 finally 塊中執(zhí)行。例如,將上面程序改為如下形式:
f =open ("test.txt",'r',True) try: while true: #每次讀取一個(gè)字符 ch = f.read(1) #如果沒(méi)有讀取到數(shù)據(jù),則跳出循環(huán) if not ch:break #輸出ch print(ch, end='') finally: f.close()
如果在調(diào)用 read() 方法時(shí)不傳入?yún)?shù),該方法默認(rèn)會(huì)讀取全部文件內(nèi)容。例如如下程序:
f = open("test.txt", 'r', True) # 直接讀取全部文件 print(f.read()) f.close()
通過(guò)上面兩個(gè)程序,讀者可能已經(jīng)發(fā)現(xiàn)了一個(gè)問(wèn)題,當(dāng)使用 open() 函數(shù)打開(kāi)文本文件時(shí),程序使用的是哪種字符集呢?總是使用當(dāng)前操作系統(tǒng)的字符集,比如 Windows 平臺(tái),open() 函數(shù)總是使用 GBK 字符集。因此,上面程序讀取的 test.txt 也必須使用 GBK 字符集保存;否則,程序就會(huì)出現(xiàn) UnicodeDecodeError 錯(cuò)誤。
如果要讀取的文件所使用的字符集和當(dāng)前操作系統(tǒng)的字符集不匹配,則有兩種解決方式:
使用二進(jìn)制模式讀取,然后用 bytes 的 decode() 方法恢復(fù)成字符串。
利用 codecs 模塊的 open() 函數(shù)來(lái)打開(kāi)文件,該函數(shù)在打開(kāi)文件時(shí)允許指定字符集。
下面程序使用二進(jìn)制模式來(lái)讀取文本文件:
# 指定使用二進(jìn)制方式讀取文件內(nèi)容 f = open("read_test3.py", 'rb', True) # 直接讀取全部文件,并調(diào)用bytes的decode將字節(jié)內(nèi)容恢復(fù)成字符串 print(f.read().decode('utf-8')) f.close()
上面程序在調(diào)用 open() 函數(shù)時(shí),傳入了 rb 模式,這表明采用二進(jìn)制模式讀取文件,此時(shí)文件對(duì)象的 read() 方法返回的是 bytes 對(duì)象,程序可調(diào)用 bytes 對(duì)象的 decode() 方法將它恢復(fù)成字符串。由于此時(shí)讀取的 read_test3.py 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢復(fù)字符串時(shí)顯式指定使用 UTF-8 字符集。
下面程序使用 codes 模塊的 open() 函數(shù)來(lái)打開(kāi)文件,此時(shí)可以顯式指定字符集:
import codecs #指定使用utf-8 字符集讀取文件內(nèi)容 f = codecs.open("read_test4.py", 'r', 'utf-8', buffering=True) while True: #每次讀取一個(gè)字符 ch = f.read(1) #如果沒(méi)有讀取到數(shù)據(jù),則跳出循環(huán) if not ch : break #輸出ch print (ch, end='') f.close()
關(guān)于Python中的 read函數(shù)如何按字節(jié)(字符)讀取文件就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。