Python3 io文本及原始流I/O工具用法詳解
io模塊在解釋器的內(nèi)置open()之上實(shí)現(xiàn)了一些類(lèi)來(lái)完成基于文件的輸入和輸出操作。這些類(lèi)得到了適當(dāng)?shù)姆纸?,從而可以針?duì)不同的用途重新組合——例如,支持向一個(gè)網(wǎng)絡(luò)套接字寫(xiě)Unicode數(shù)據(jù)。
1.1 內(nèi)存中的流
StringIO提供了一種很便利的方式,可以使用文件API(如read()、write()等)處理內(nèi)存中的文本。有些情況下,與其他一些字符串連接技術(shù)相比,使用StringIO構(gòu)造大字符串可以提供更好的性能。內(nèi)存中的流緩沖區(qū)對(duì)測(cè)試也很有用,寫(xiě)入磁盤(pán)上真正的文件并不會(huì)減慢測(cè)試套件的速度。
下面是使用StringIO緩沖區(qū)的一些標(biāo)準(zhǔn)例子。
import io
# Writing to a buffer
output = io.StringIO()
output.write('This goes into the buffer. ')
print('And so does this.', file=output)
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
# Initialize a read buffer
input = io.StringIO('Inital value for read buffer')
# Read from the buffer
print(input.read())
這個(gè)例子使用了read(),不過(guò)也可以用readline()和readlines()方法。StringIO類(lèi)還提供了一個(gè)seek()方法,讀取文本時(shí)可以在緩沖區(qū)中跳轉(zhuǎn),如果使用一種前向解析算法,則這個(gè)方法對(duì)于回轉(zhuǎn)很有用。

要處理原始字節(jié)而不是Unicode文本,可以使用BytesIO。
import io
# Writing to a buffer
output = io.BytesIO()
output.write('This goes into the buffer. '.encode('utf-8'))
output.write('ÁÇÊ'.encode('utf-8'))
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
# Initialize a read buffer
input = io.BytesIO(b'Inital value for read buffer')
# Read from the buffer
print(input.read())
寫(xiě)入BytesIO實(shí)例的值一定是bytes而不是str。

1.2 為文本數(shù)據(jù)包裝字節(jié)流
原始字節(jié)流(如套接字)可以被包裝為一個(gè)層來(lái)處理串編碼和解碼,從而可以更容易地用于處理文本數(shù)據(jù)。TextIOWrapper類(lèi)支持讀寫(xiě)。write_through參數(shù)會(huì)禁用緩沖,并且立即將寫(xiě)至包裝器的所有數(shù)據(jù)刷新輸出到底層緩沖區(qū)。
import io
# Writing to a buffer
output = io.BytesIO()
wrapper = io.TextIOWrapper(
output,
encoding='utf-8',
write_through=True,
)
wrapper.write('This goes into the buffer. ')
wrapper.write('ÁÇÊ')
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
# Initialize a read buffer
input = io.BytesIO(
b'Inital value for read buffer with unicode characters ' +
'ÁÇÊ'.encode('utf-8')
)
wrapper = io.TextIOWrapper(input, encoding='utf-8')
# Read from the buffer
print(wrapper.read())
這個(gè)例子使用了一個(gè)BytesIO實(shí)例作為流。對(duì)應(yīng)bz2、http,server和subprocess的例子展示了如何對(duì)其他類(lèi)型的類(lèi)似文件的對(duì)象使用TextIOWrapper。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法,結(jié)合實(shí)例形式分析了Python基于urllib2及cookielib模塊的http請(qǐng)求、數(shù)據(jù)傳輸及交互相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
Python個(gè)人博客程序開(kāi)發(fā)實(shí)例用戶(hù)驗(yàn)證功能
這篇文章主要介紹了怎樣用Python來(lái)實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過(guò)實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來(lái)看看吧2022-12-12
python opencv如何實(shí)現(xiàn)圖片繪制
這篇文章主要介紹了python opencv如何實(shí)現(xiàn)圖片繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
使用Python的PIL庫(kù)給圖像進(jìn)行過(guò)濾
PIL是一個(gè)用于圖像處理的Python庫(kù),它提供了各種功能,包括加載、保存、編輯和處理圖像,你可以使用PIL庫(kù)進(jìn)行圖像縮放、裁剪、旋轉(zhuǎn)、濾鏡應(yīng)用等操作,本文將介紹如何使用Python的PIL庫(kù)給圖像進(jìn)行過(guò)濾,需要的朋友可以參考下2023-08-08
Python實(shí)現(xiàn)word2Vec model過(guò)程解析
這篇文章主要介紹了Python實(shí)現(xiàn)word2Vec model過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Python爬蟲(chóng)之Selenium實(shí)現(xiàn)鍵盤(pán)事件
這篇文章主要介紹了Python爬蟲(chóng)之Selenium實(shí)現(xiàn)鍵盤(pán)事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python目標(biāo)檢測(cè)yolo3詳解預(yù)測(cè)及代碼復(fù)現(xiàn)
這篇文章主要為大家介紹了python目標(biāo)檢測(cè)yolo3詳解預(yù)測(cè)及代碼復(fù)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

