用意
本篇用意, 即是把記憶体當作是檔案來操作, 所以就有寫入String或寫入Bytes二種
StringIO
使用StringIO()產生一個記憶体檔案物件, 然後用就可以使用write()寫入, 但讀出不能使用read(), 而是要使用getvalue()函數
from io import StringIO mem=StringIO() mem.write('第一行\n') mem.write('第二行\n') mem.write('第三行\n') print(mem.getvalue())
若要使用read()等函數讀出, 只能在產生StringIO物件時, 利用建構子傳入字串, 這樣read(), readline(), readlines()才可以讀出.
不過請注意, 就算建構子有傳入字串, 稍後又用了write()寫入的話, 那麼read()等又無法取得資料了. 所以下面紅色的部份, 一定要註解掉
from io import StringIO mem=StringIO('第一行\n第二行\n第三行') #mem.write('第一行\n') #mem.write('第二行\n') #mem.write('第三行\n') print(mem.getvalue()) for line in mem.readlines(): print(line) while True: s=mem.readline() if not s:break print(s)
BytesIO
若要寫入二進位資料, 可以使用BytesIO, 下面代碼中, 記得把字串加上encode(‘utf-8’)轉成字元碼再寫入, 如果直接寫入字串, 是會發生字串無法寫入bytes的例外的
from io import BytesIO
mem=BytesIO()
mem.write('第一行\n'.encode('utf-8'))
print(mem.getvalue())