在python中加速int-list到二进制的转换

2024-10-04 11:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

Python初学者。我有一个大的数据集,一开始是一个16位整数的字符串,“1,2,3,4,5”,最后需要转换成一个字节对齐的二进制文件。你知道吗

目前,我的工作包括:

#helper function
def unintlist2hex(list_input):
    for current in range(len(list_input)):
        list_input[current] = "%04X"%(int(list_input[current]))
return list_input

#where helper gets called in main code
for rows in dataset:
    row_list = rows.text.split(",")
    f_out.write(binascii.unhexlify("".join(unintlist2hex(row_list))))

但是对于我有限的数据测试大小(大约300000 int),这运行起来相当慢。我怎么能加快速度呢?我分析了代码,所有的大部分周期都花在unintlist2hex()

注意,我很难使用hex()bin(),因为它们有截断前导零的倾向。你知道吗


Tags: 数据字符串inhelperforinput字节整数
1条回答
网友
1楼 · 发布于 2024-10-04 11:36:17

struct模块可能是最好的选择

>>> import struct
>>> struct.pack("5I", *(int(x) for x in "1,2,3,4,5".split(",")))
'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00'

您可以使用><来设置endianess

>>> struct.pack(">5I", *(int(x) for x in "1,2,3,4,5".split(",")))
'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05'

例如:

for rows in dataset:
    row_list = [int(x) for x in rows.text.split(",")]
    f_out.write(struct.pack("{}I".format(len(row_list)), *row_list))

相关问题 更多 >