共计 743 个字符,预计需要花费 2 分钟才能阅读完成。
很多时候,数据读写不一定是文件,也可以在内存中读写。
StringIO
StringIO 顾名思义就是在内存中读写 str。
要把 str 写入 StringIO,我们需要先创建一个 StringIO,然后,像文件一样写入即可:
from io import StringIO
s = "abcdefg123"
sio = StringIO(s) # sio 就是可变字符串
print(sio.getvalue()) # abcdefg123
sio.seek(7) # 指针移动到索引 7 这个位置
sio.write("666")
print(sio.getvalue()) # abcdefg666
要读取 StringIO,可以用一个 str 初始化 StringIO,然后,像读文件一样读取:
f = StringIO("hello\nworld")
while True:
s = f.readline()
if s == "":
break
print(s.strip())
BytesIO
StringIO 操作的只能是 str,如果要操作二进制数据,就需要使用 BytesIO。
BytesIO 实现了在内存中读写 bytes,我们创建一个 BytesIO,然后写入一些 bytes:
from io import BytesIO
f = BytesIO()
f.write(" 你好 ".encode("utf-8"))
print(f.getvalue())
请注意,写入的不是 str,而是经过 UTF- 8 编码的 bytes。
和 StringIO 类似,可以用一个 bytes 初始化 BytesIO,然后,像读文件一样读取:
f = BytesIO(b"xe4xbdxa0xe5xa5xbd")
print(f.read())
小结
StringIO 和 BytesIO 是在内存中操作 str 和 bytes 的方法,使得和读写文件具有一致的接口。
正文完