【发布时间】:2016-11-20 17:10:40
【问题描述】:
我在尝试解压缩从文件中读取的数据时收到MemoryError。我希望能够读取每一个字节,这就是我打开它的原因。当我只解压缩 1 个字节时它可以工作,但是当我想读取整个转储 (total_size) 时,它会给出错误。我不知道该怎么办。
def read_memory(self, mem_file, address, byte_count):
mem_file.seek(address)
data = mem_file.read(byte_count)
return data
memory_dump = self.read_memory(mem_file, start_addr, total_size)
unpacked = struct.unpack("{}B".format(total_size), memory_dump) # MemoryError
我该如何解决这个问题?
【问题讨论】:
-
你为什么要解压
data?如果data是一个字节串(可能),那么它已经是一个字节序列。以后怎么用unpacked?如果您需要一个看起来像是读取整个文件的对象,您可以尝试mmap(即使文件不适合内存,只要它适合地址空间)。 -
@J.F.Sebastian 我想将每个字节与字节数组中的元素进行比较。但是例如 memory_dump[0] 是 '\x7f' 我不能将它与一个字节进行比较。我该怎么做?
-
好的,我使用 hexlify 修复了它。感谢您的建议!
-
您可以根据具体情况使用
mmap、array.array.fromfile、bytearray(bytestring)或反向使用bytes(some_bytearray)。可能有几种有效的方法(在 Python 2 上索引str返回单个长度str,在 Python 3 上返回int)。hexlify()返回字节的 text 表示不是它。这可能是一个有趣的单独问题:您在比较二进制文件吗?它们有多大?是否存在大于字节的内部结构?是否需要一次读取整个文件?