Python如何按8字节块遍历bytearray,sys.getsizeof返回值偏大原因是什么
问题解答
sys.getsizeof返回值偏大的原因
sys.getsizeof()返回的是Python对象本身占用的全部内存字节数,不是对象存储的有效数据长度。bytes是Python的内置对象,除了你切分得到的8字节有效载荷,还需要存储对象元数据(包括引用计数、类型指针、长度属性等),这部分元数据占了33字节左右,加起来总大小就是你看到的41字节,属于正常情况。
你要确认块的有效长度,直接调用len(chunk)即可,返回值就是你预期的8(文件最后不足8字节的块会返回实际长度)。做值比对的时候直接用chunk == 目标8字节bytes对象就可以,完全不受sys.getsizeof()结果的影响。
已加载字节序列的按块遍历方案
你现有的while循环逻辑基本可用,只有一个小问题:判断条件i <= len(read_file)会在i等于read_file总长度时,切出一个空的bytes对象,调整为i < len(read_file)即可避免。
更简洁易读的实现可以直接用带步长的range()遍历:
with open("read.file", 'rb') as f: read_file = f.read() for offset in range(0, len(read_file), 8): chunk = read_file[offset:offset+8] # 此处添加你的比对逻辑 print(len(chunk))
如果需要复用固定块大小的遍历逻辑,可以封装为生成器函数:
def iter_bytes_by_chunk(raw_data: bytes, chunk_size: int = 8): for offset in range(0, len(raw_data), chunk_size): yield raw_data[offset:offset+chunk_size] # 调用示例 for chunk in iter_bytes_by_chunk(read_file): # 执行比对逻辑 pass
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

