gpt4 book ai didi

python - 将二进制数据打包和解包到列表中的最快方法

转载 作者:行者123 更新时间:2023-12-01 04:47:52 30 4
gpt4 key购买 nike

我正在编写一个脚本,它将从数千个文件中读取 32 字节的数据。 32 个字节由 8 对 16 位整数组成,我想将它们解压为 Python 整数以构建一个由平均数组成的列表。然后,我想向运行脚本的用户打印列表的十六进制字符串(打包方式与解包方式相同)以及列表对象本身。

我当前的代码如下所示,它比我希望的要慢(即使考虑到繁重的 I/O 负载):

import os
import sys
import struct
import binascii

def list_str(list):
return str(list)

def list_s16be_hex(list):
i = 0
bytes = b""
while i < len(list):
bytes += struct.pack(">h", list[i])
i += 1
return binascii.hexlify(bytes).decode("ascii")

def main():
averages = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
root = os.path.dirname(__file__)
for dirpath, dirnames, filenames in os.walk(root):
for filename in filenames:
with open(os.path.join(dirpath, filename), "rb") as f:
f.seek(0x10)
tmp = f.read(32)

i = 0
while i < 32:
averages[i//2] = (averages[i//2] + struct.unpack(">h", tmp[i:i+2])[0]) // 2
i += 2

print("Updated averages (hex): " + list_s16be_hex(averages))
print("Updated averages (list): " + list_str(averages))

return 0

if __name__=="__main__":
main()

有没有更有效的方法来做到这一点?

最佳答案

您可以使用 struct.unpack(">16h", tmp) 一次解压所有 16 个整数,这对于计算部分来说应该要快得多。否则,我希望你的程序运行时间由 I/O 主导,你可以通过测量它的运行时间来检查它,而无需进行平均计算。对于 I/O,您无能为力。

关于python - 将二进制数据打包和解包到列表中的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048420/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com