Python StringIO與BytesIO、類文件對象


StringIO與BytesIO

StringIO與BytesIO、類文件對象的用途,應用場景,優、缺點。

 

StringIO

StringIO 是io 模塊中的類,在內存中開辟的一個文本模式的buffer,可以像文件對象一樣操作它。當close 方法被調用的時候,這個buffer 會被釋放。

好處:一般來說,磁盤的操作比內存的操作要慢的多,內存足夠的時候,一般的優化思路是少落地,減少磁盤IO的過程,可以大大提高程序的運行速度。業務中單機情況可以使用StringIo或者BytesIO,多機就考慮使用 redis。
缺點:內存斷電,buffer 中的數據會丟失,所以不建議存儲很重要的數據,但可以存儲日志之類的丟失也沒有大影響的數據。


直接導入:form io import StringIO 使用:StringIO()
導入io 模塊:import io 使用時調用StringIO方法:io.StringIO()

readline() 逐行讀取
getvalue() 獲取全部內容:

 

In [53]: from io import StringIO

In [54]: sio = StringIO()

In [55]: print(sio.readable(),sio.writable(),sio.seekable())
True True True

In [56]: sio.write("hello\nPython")
Out[56]: 12

In [57]: sio.seek(0)
Out[57]: 0

In [58]: sio.readline() 
Out[58]: 'hello\n'

In [59]: sio.tell()   #讀取一行后,文件指針移到了下行行首
Out[59]: 6

In [60]: sio.getvalue()  #不受文件指針影響,輸出全部內容
Out[60]: 'hello\nPython'

In [61]: sio.close()

  

  

BytesIO

 

BytesIO 也是io模塊中的類,內存中開辟的一個二進制模式的buffer,也可以像文件對象一樣操作它,當close方法調用的時候,這個buffer也會被釋放。

簡單使用方法與StringIO 一樣:

In [44]: from io import BytesIO

In [45]: bio = BytesIO()

In [46]: print(bio.readable(),bio.writable(),bio.seekable())
True True True

In [47]: bio.write(b'hello\nPython')
Out[47]: 12

In [48]: bio.seek(0)
Out[48]: 0

In [49]: bio.readline()
Out[49]: b'hello\n'

In [50]: bio.tell()
Out[50]: 6

In [51]: bio.getvalue()
Out[51]: b'hello\nPython'

In [52]: bio.close()

  

file-like對象

類文件對象,可以像文件對象一樣操作
socket對象、輸入輸出對象(stdin、stdout)都是類文件對象

In [1]:  from sys import stdout

In [2]: print(type(stdout))
<class 'colorama.ansitowin32.StreamWrapper'>  #linux下可能是<class '_io.TextIOWrapper'>

In [3]: stdout.write('hello\nPython\n')  #控制台打印
hello
Python

In [4]: stdout.close()

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM