5.6 字符串的I/O操作

2018-02-24 15:26 更新

問題

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

解決方案

使用 io.StringIO()io.BytesIO() 類來創(chuàng)建類文件對象操作字符串?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 類來代替。比如:

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

討論

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號