Python io模块StringIO和BytesIO

19次阅读
没有评论

共计 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 的方法,使得和读写文件具有一致的接口。

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-17发表,共计743字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)