国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 内存IO 以获得更好的体验。

# Python 的内存 I/O

文件 I/O 是对硬盘(外存)的操作,很多情况下,需要在内存中存储并操作数据(例如网页上动态生成图片、压缩包),在 Python 中可以使用 StringIOBytesIO 实现这一点。

变量本身就是对内存的操作,此处的 StringIOBytesIO 提供类似文件 I/O 的,便于使用的流式操作接口。

# StringIO

StringIO 顾名思义,是对字符串的 I/O 操作,和文件 I/O 一样,支持 readwritetellseek 等方法;并可以通过 getvalue 方法获取完整的字符串。

运行示例

import io
from io import StringIO

stream = StringIO("甲乙丙丁戊己庚辛壬癸")   # 创建 StringIO 对象
print("初始偏移为", stream.tell())          # 查看初始偏移
print(stream.read(3))                       # 读取 3 个字符
stream.seek(6, io.SEEK_SET)                 # 将偏移量设为,文件开头 + 6 字符
print(stream.read(3))                       # 读取 3 个字符
stream.seek(0, io.SEEK_SET)                 # 将偏移量设为,文件开头
stream.write("ABC")                         # 在中间写入,会进行覆盖
print(stream.getvalue())                    # 获取整个字符串

# BytesIO

BytesIO 顾名思义,是对字节数据的 I/O 操作,和文件 I/O 一样,支持 readwritetellseek 等方法;并可以通过 getvalue 方法获取完整的 bytes

运行示例

import io
from io import BytesIO

stream = BytesIO(b"ABCDEFGHIJKLMNOPQRSTUVWXYZ")     # 创建 BytesIO 对象
print("初始偏移为", stream.tell())                  # 查看初始偏移
print(stream.read(3))                               # 读取 3 个字节
stream.seek(6, io.SEEK_SET)                         # 将偏移量设为,文件开头 + 6 字节
print(stream.read(3))                               # 读取 3 个字节
stream.seek(0, io.SEEK_SET)                         # 将偏移量设为,文件开头
stream.write(b"XXX")                                # 在中间写入,会进行覆盖
print(stream.getvalue())                            # 获取整个字符串
本文 更新于: 2025-06-19 01:15:32 创建于: 2025-06-19 01:15:32