5.6 字符串的I/O操作

2018-02-24 15:26 更新

問(wèn)題

你想使用操作類(lèi)文件對(duì)象的程序來(lái)操作文本或二進(jìn)制字符串。

解決方案

使用 io.StringIO()io.BytesIO() 類(lèi)來(lái)創(chuàng)建類(lèi)文件對(duì)象操作字符串?dāng)?shù)據(jù)。比如:

>>> s = io.StringIO()
>>> s.write('Hello World\n')
12
>>> print('This is a test', file=s)
15
>>> # Get all of the data written so far
>>> s.getvalue()
'Hello World\nThis is a test\n'
>>>

>>> # Wrap a file interface around an existing string
>>> s = io.StringIO('Hello\nWorld\n')
>>> s.read(4)
'Hell'
>>> s.read()
'o\nWorld\n'
>>>

io.StringIO 只能用于文本。如果你要操作二進(jìn)制數(shù)據(jù),要使用 io.BytesIO 類(lèi)來(lái)代替。比如:

>>> s = io.BytesIO()
>>> s.write(b'binary data')
>>> s.getvalue()
b'binary data'
>>>

討論

當(dāng)你想模擬一個(gè)普通的文件的時(shí)候 StringIOBytesIO 類(lèi)是很有用的。比如,在單元測(cè)試中,你可以使用 StringIO 來(lái)創(chuàng)建一個(gè)包含測(cè)試數(shù)據(jù)的類(lèi)文件對(duì)象,這個(gè)對(duì)象可以被傳給某個(gè)參數(shù)為普通文件對(duì)象的函數(shù)。

需要注意的是,StringIOBytesIO 實(shí)例并沒(méi)有正確的整數(shù)類(lèi)型的文件描述符。因此,它們不能在那些需要使用真實(shí)的系統(tǒng)級(jí)文件如文件,管道或者是套接字的程序中使用。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)