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")) # 这是一段长文本,我须要进行压缩,否则我存不下去啊