抱歉我的英文
我有一个列表:
[['string type','short int type','long int type','string type','float'],
['Stackoverflow','32','0','any stringgg','55.0'],
['anystring','16','1654657987984','striiingg','2.5']]
我打电话:
['string type','short int type','long int type','string type','float']
是第一个子列表 和
['Stackoverflow','32','0','any stringgg','55.0']
是第二个子列表,对于三个子列表
是相同的如何在第二个&中使用struct.pack()数据?第三个子列表基于第一个子列表的类型?
答案 0 :(得分:1)
你可以做这样的事情(快速编码,可以使用一些工作)
import struct
type_map = {
'string type': 's',
'short int type': 'h',
'long int type': 'q',
'float': 'f'
}
conversion = {
's': str,
'h': int,
'q': int,
'f': float
}
def do_pack(types, data):
if len(types) != len(data):
raise Excpetion("wrong lengths")
packing = '<'
data_iter = []
for i, struct_type in enumerate(types):
t = type_map[struct_type]
if t == 's':
packing += '%ds' % len(data[i])
data_iter.append(data[i])
else:
packing += t
data_iter.append(conversion[t](data[i]))
return struct.pack(packing, *data_iter), packing
packer = [['string type','short int type','long int type','string type','float'],['Stackoverflow','32','0','any stringgg','55.0'],['anystring','16','1654657987984','striiingg','2.5']]
types = packer[0]
for data_set in packer[1:]:
binary, packing = do_pack(types, data_set)
print struct.unpack(packing, binary)
<强>输出强>
('Stackoverflow', 32, 0, 'any stringgg', 55.0)
('anystring', 16, 1654657987984, 'striiingg', 2.5)