StringIO & BytesIO

      在〈StringIO & BytesIO〉中尚無留言

用意

本篇用意, 即是把記憶体當作是檔案來操作, 所以就有寫入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())

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *