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))))
但是对于我有限的数据测试大小(大约300,000英寸),这种运行速度相当慢。我怎么能加快速度呢?我分析了代码,大部分所有周期都用在unintlist2hex()
请注意,我努力使用hex()
和bin()
,因为他们倾向于截断前导零。
答案 0 :(得分:1)
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'
您可以使用>
或<
设置结束
>>> 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))