Python3: 内存中的 IO 流缓冲区 - StringIO 和 BytesIO
程序员文章站
2024-01-04 20:37:16
...
本文链接: https://xiets.blog.csdn.net/article/details/117575283
通过 open()
方法可以打开一个基于文件的读写 文本/二进制 IO 流。io
模块也提供了在内存中缓冲读写 文本/二进制 IO 流的 StringIO
和 BytesIO
。
文本/二进制 IO 流的相关类层次和读写方法:IO 类的层次结构 和 读写方法
1. io.StringIO
io.StringIO
是基于文本字符读写的 IO 流,与 open() 打开的文件字符流有着相同的操作方法。
写入字符串:
>>> import io
>>>
>>> f = io.StringIO() # 创建一个在内存中的字符 IO 流缓冲区
>>>
>>> f.write("Hello") # 写入字符串
5
>>> f.write(" ")
1
>>> f.write("World")
5
>>> f.getvalue() # 获取缓存区中的所有字符, 返回字符串
'Hello World'
>>>
>>> f.close() # 关闭流
读取字符串:
>>> import io
>>>
>>> f = io.StringIO("abc\ndef\n123") # 创建一个在内存中的字符 IO 流缓冲区
>>>
>>> f.readline() # 读取一行
'abc\n'
>>> f.read() # 读写剩下所有字符
'def\n123'
>>>
>>> f.close() # 关闭流
配合 seek()
方法可以同时读取和写入。
2. io.BytesIO
io.BytesIO
是基于二进制读写的 IO 流,与 open() 打开的文件二进制流有着相同的操作方法。
写入 bytes:
>>> import io
>>>
>>> f = io.BytesIO() # 创建一个在内存中的二进制 IO 流缓冲区
>>> f.write(b"Hello") # 写入 bytes
5
>>> f.write(b" ")
1
>>> f.write(b"World")
5
>>> f.getvalue() # 获取缓存区中的所有 bytes, 返回 bytes
b'Hello World'
>>>
>>> f.close() # 关闭流
读取 bytes:
>>> import io
>>>
>>> f = io.BytesIO(b"abc\ndef\n123") # 创建一个在内存中的二进制 IO 流缓冲区
>>> f.readline() # 读取一行内容
b'abc\n'
>>> f.read() # 读写剩下所有内容
b'def\n123'
>>>
>>> f.close() # 关闭流
配合 seek()
方法可以同时读取和写入。