StringIO
- io模塊中的類 from io import StringIO
- 內存中,開辟一個文本模式的buffer,可以像文件對象一樣操作它
- 當close方法被調用的時候,這個buffer會被釋放
StringIO操作
getvalue() 獲取全部內容。根文件指針沒有關系
>>> from io import StringIO >>> # 內存中構建 >>> sio = StringIO() # 像文件對象一樣操作 >>> print(sio, sio.readable(), sio.writable(), sio.seekable()) <_io.StringIO object at 0x0000010B14ECE4C8> True True True >>> sio.write("hello,world!") 12 >>> sio.seek(0) 0 >>> sio.readline() 'hello,world!' >>> sio.getvalue() # 無視指針,輸出全部內容 'hello,world!' >>> sio.close()
優點
一般來說,磁盤的操作比內存的操作要慢得多,內存足夠的情況下,一般的優化思路是少落地,減少磁盤IO的過程,可以大大提高程序的運行效率
BytesIO
- io模塊中的類 from io import BytesIO
- 內存中,開辟一個二進制模式的buffer,可以像文件對象一樣操作它
- 當close方法被調用的時候,這個buffer會被釋放
BytesIO操作
>>> from io import BytesIO >>> # 內存中構建 >>> bio = BytesIO() >>> print(bio, bio.readable(), bio.writable(), bio.seekable()) <_io.BytesIO object at 0x0000010B14ED7EB8> True True True >>> bio.write(b"hello,world!) 12 >>> bio.seek(0) 0 >>> bio.readline() b'hello,world!' >>> bio.getvalue() # 無視指針,輸出全部內容 b'hello,world!' >>> bio.close()
file-like對象
類文件對象,可以像文件對象一樣操作
socket對象、輸入輸出對象(stdin、stdout)都是類文件對象
>>> from sys import stdout >>> f = stdout >>> print(type(f)) <class 'ipykernel.iostream.OutStream'> >>> f.write("hello,world!") hello,world!