io模塊是python中專門用來進行流處理的模塊
提供字符串形式的緩存,能夠不斷地往裏面寫入數據,最後一次性讀出
import io # 建立相應的緩存 buf = io.StringIO() buf.write("我是誰?") # 寫的內容是鏈接在一塊兒的,不會自動換行,若是想要換行,須要加\n buf.write("我在哪?\n") buf.write("誰在打我?") # 經過getvalue獲取內容 print(buf.getvalue()) """ 我是誰?我在哪? 誰在打我? """
既然有StringIO,那麼確定也會有BytesIO,用法是同樣的
import io # 建立相應的緩存 buf = io.BytesIO() buf.write(bytes("我是誰?", encoding="utf-8")) buf.write(bytes("我在哪?\n", encoding="utf-8")) buf.write(bytes("誰在打我?", encoding="utf-8")) # 經過getvalue獲取內容 data = buf.getvalue() print(data) """ b'\xe6\x88\x91\xe6\x98\xaf\xe8\xb0\x81\xef\xbc\x9f\xe6\x88\x91\xe5\x9c\xa8\xe5\x93\xaa\xef\xbc\x9f\n\xe8\xb0\x81\xe5\x9c\xa8\xe6\x89\x93\xe6\x88\x91\xef\xbc\x9f' """ print(str(data, encoding="utf-8")) """ 我是誰?我在哪? 誰在打我? """
將一個字節流對象包裝成一個文本對象
import io import gzip with gzip.open("1.tar.gz", "wb") as out: # 我想往裏面寫入文本,那麼須要對其進行一個包裝 with io.TextIOWrapper(out, encoding="utf-8") as f: # 這裏的f和咱們使用open函數獲得的f是相似的 f.write("我要寫入文件了") # 讀取文件 with gzip.open("1.tar.gz", "rb") as out: with io.TextIOWrapper(out, encoding="utf-8") as f: print(f.read()) # 我要寫入文件了 import os os.remove("1.tar.gz")
固然這裏換成open也是能夠的,主要就是對字節流的文本對象進行一個包裝,從而能夠寫入字符串。記住若是要想使用io.TextIOWrapper進行包裝的話,那麼打開的方式必定要是二進制的方式
python
import io import gzip with open("1.png", "wb") as out: with io.TextIOWrapper(out, encoding="utf-8") as f: f.write("這是一張圖片") # 讀取文件 with open("1.png", "rb") as out: with io.TextIOWrapper(out, encoding="utf-8") as f: print(f.read()) # 這是一張圖片 import os os.remove("1.png")
import io import gzip text = "這是一段長文本,我須要進行壓縮,否則我存不下去啊" buf = io.BytesIO() # 使用gzip.GzipFile進行壓縮。只須要指定mode:壓縮仍是解壓,fileobj:壓縮到什麼地方仍是從什麼地方解壓,便可 # 固然還能夠指定壓縮等級,範圍是0-9,默認是9,值越大計算越慢,可是壓縮程度越高 with gzip.GzipFile(mode="wb", fileobj=buf, compresslevel=9) as out: # 直接寫入就能夠了(須要轉化爲字節),會自動將寫入的內容進行壓縮,寫到fileobj裏面去。 out.write(bytes(text, encoding="utf-8")) # 怎麼把寫進去的東西獲取出來了 with gzip.GzipFile(mode="rb", fileobj=io.BytesIO(buf.getvalue())) as out: # 將mode改爲rb,將內容再次放到BytesIO裏面,而後調用out.read方法 # 會自動的將讀出的內容進行解壓縮。 print(str(out.read(), encoding="utf-8")) # 這是一段長文本,我須要進行壓縮,否則我存不下去啊