跳转至

读写内存

StringIO

  • 向内存中写入str数据
from io import StringIO
# 创建一个缓存对象
f = StringIO()

f.write('Hello!\nHi!\nGoodbye!')  # 像操作文件一样写入
  • 从内存中读取str数据
from io import StringIO
# 创建一个缓存对象
f = StringIO('Hello!\nHi!\nGoodbye!')  # 初始化

f.read()  # 像操作文件一样读取

BytesIO

  • 向内存中写入bytes数据
from io import BytesIO
# 创建一个缓存对象
f = BytesIO()

f.write(b'\xe4\xb8\xad\xe6\x96\x87')  # 像操作文件一样写入
  • 从内存中读取bytes数据
from io import BytesIO
# 创建一个缓存对象
output_buffer = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')  # 初始化

f.read()  # 像操作文件一样读取

指针问题

  • f.tell() 返回指针当前位置
  • f.seek(offset, 0) 移动指针位置,从初始位置开始计算(默认),移动offset个字节
  • f.seek(7, 1) 移动指针位置,从当前位置开始计算,往后移动7个字节
  • f.seek(-7, 2) 移动指针位置,从末尾位置开始计算,往前移动7个字节
print(f.tell())  # 操作前,指针位置是0

f.write('Hello')  # 进行读取/写入操作
print(f.tell())  # 操作后,指针位置移到了最后5

print(f.read())  # 此时如果读取,则会得到空值
f.seek(0)  # 可以将指针移回初始位置,此时再读取将可以读到
# 另外也可以用以下方式获取,不受指针位置影响
print(f.getvalue())

最后更新: 2021-11-26