我想读取二进制文件的特定部分。我将实现一个二进制文件来“模拟”数组。
例如,假设所有对象的大小都相同(从字面上看是22个字节):
因此,当我插入这两个对象时,我成功读取了第二个对象,但是在尝试读取第一个对象时出现错误。
进口
import pickle
from sys import getsizeof
插入第一个对象
with open("test2", "wb") as f:
buffer = pickle.dumps(10)
print(getsizeof(buffer))
f.write(buffer)
f.close
控制台:
22
所以我使用seek()在位置22中插入另一个数字
with open("test2", "wb") as f:
buffer = pickle.dumps(20)
f.seek(22,1)
print(getsizeof(buffer))
f.write(buffer)
f.close
控制台调整sabe大小
22
现在尝试读取第二个数字(数字20)
with open("test2", "rb") as f:
f.seek(22,1)
buffer = f.read()
print(getsizeof(buffer))
print(pickle.loads(buffer))
f.close
控制台日志成功显示该数字及其大小(以字节为单位)
22 20
但是现在,当尝试阅读第一个时:
with open("test2", "rb") as f:
buffer = f.read(22)
print(getsizeof(buffer))
print(pickle.loads(buffer))
f.close
控制台显示错误的请求字节大小
39
错误
发生了异常:_pickle.UnpicklingErrorload键'\ x00'。
我不知道它是否相关,但这就是读取的所有文件
b'\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x80 \ x03K \ x14。'