(一)stringIO
很多時(shí)候点额,數(shù)據(jù)讀寫不一定是文件丰嘉,也可以在內(nèi)存中讀寫。
StringIO顧名思義就是在內(nèi)存中讀寫str峦萎。
要把str寫入StringIO,我們需要先創(chuàng)建一個(gè)StringIO忆首,然后爱榔,像文件一樣寫入即可:
>>>?from?io?import?StringIO
>>>?f?=?StringIO()
>>>?f.write('hello')
5
>>>?f.write('?')
1
>>>?f.write('world!')
6
>>>?print(f.getvalue())
hello?world!
(二)??BytesIO
StringIO操作的只能是str,如果要操作二進(jìn)制數(shù)據(jù)糙及,就需要使用BytesIO详幽。
BytesIO實(shí)現(xiàn)了在內(nèi)存中讀寫bytes,我們創(chuàng)建一個(gè)BytesIO,然后寫入一些bytes:
>>>?from?io?import?BytesIO
>>>?f?=?BytesIO()
>>>?f.write('中文'.encode('utf-8'))
6
>>>?print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'
請(qǐng)注意唇聘,寫入的不是str版姑,而是經(jīng)過UTF-8編碼的bytes。
和StringIO類似迟郎,可以用一個(gè)bytes初始化BytesIO剥险,然后,像讀文件一樣讀认苄ぁ:
>>>?from?io?import?BytesIO
>>>?f?=?BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
>>>?f.read()
b'\xe4\xb8\xad\xe6\x96\x87'