# StringIO和BytesIO
(1)StringIO顧名思義就是在內存中讀寫str。
(2)StringIO操做的只能是str,若是要操做二進制數據,就須要使用BytesIO。
# stringIO 好比說,這時候,你須要對獲取到的數據進行操做,可是你並不想把數據寫到本地硬盤上,這時候你就能夠用stringIO from io import StringIO from io import BytesIO def outputstring(): return 'string \nfrom \noutputstring \nfunction' s = outputstring() # 將函數返回的數據在內存中讀 sio = StringIO(s) # 能夠用StringIO自己的方法 print(sio.getvalue()) # 也能夠用file-like object的方法 s = sio.readlines() for i in s: print(i.strip()) # 將函數返回的數據在內存中寫 sio = StringIO() sio.write(s) # 能夠用StringIO自己的方法查看 s=sio.getvalue() print(s) # 若是你用file-like object的方法查看的時候,你會發現數據爲空 sio = StringIO() sio.write(s) for i in sio.readlines(): print(i.strip()) # 這時候咱們須要修改下文件的指針位置 # 咱們發現能夠打印出內容了 sio = StringIO() sio.write(s) sio.seek(0,0) print(sio.tell()) for i in sio.readlines(): print(i.strip()) # 這就涉及到了兩個方法seek 和 tell # tell 方法獲取當前文件讀取指針的位置 # seek 方法,用於移動文件讀寫指針到指定位置,有兩個參數,第一個offset: 偏移量,須要向前或向後的字節數,正爲向後,負爲向前;第二個whence: 可選值,默認爲0,表示文件開頭,1表示相對於當前的位置,2表示文件末尾 # 用seek方法時,需注意,若是你打開的文件沒有用'b'的方式打開,則offset沒法使用負值哦 # stringIO 只能操做str,若是要操做二進制數據,就須要用到BytesIO # 上面的sio沒法用seek從當前位置向前移動,這時候,咱們用'b'的方式寫入數據,就能夠向前移動了 bio = BytesIO() bio.write(s.encode('utf-8')) print(bio.getvalue()) bio.seek(-36,1) print(bio.tell()) for i in bio.readlines(): print(i.strip())
# stringIO 只能操做str,若是要操做二進制數據,就須要用到BytesIO >>> bio = BytesIO() >>> bio.write(s.encode('utf-8')) >>> print(bio.getvalue()) b'string \nfrom \noutputstring \nfunction' >>> bio.seek(-36,1) >>> print(bio.tell()) >>> for i in bio.readlines(): print(i.strip()) b'string' b'from' b'outputstring' b'function'
@ https://www.liaoxuefeng.com/wiki/1016959663602400/1017609424203904#0函數