如何将dict打包到一个struct中,以便我可以将它存储在一个文件中,然后将其解压缩

时间:2011-03-15 08:28:49

标签: python struct

我有以下代码将字典打包成结构...

>>> this = bytearray(2)    
>>> this[0] = 100   
>>> this[1] = 150  
>>> bool = True    
>>> str = 'new'  
>>> dct = {'bt_arr': this, 'string':str, 'boolean': bool}  
>>> print dct  
{'bt_arr': bytearray(b'd\x96'), 'boolean': True, 'string': 'new'}  
val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])                                                                         
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: pack requires exactly 6 arguments

你可以告诉我上面代码中我做错了什么......

我想以类似的方式打开它......

2 个答案:

答案 0 :(得分:2)

感谢martineaueumiro我得到了这个解决方案,如果有更好的解决方案,请告诉我

val = struct.pack ('!' + 'B' +'B' + 'c'*3 + '?', *(tuple(dct['bt_arr'][0:2])+ tuple(dct['string'][0:3]) + (dct['boolean'],)))

答案 1 :(得分:0)

此处缺少括号有问题:

dct['bt_arr'[1]

修改

val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])

这种格式'!' + 'B' +'B' + 'B'*3 + '?'想要存储五个元素,这就是函数需要六个参数(包括格式)的原因。你只提供四个。

<强> EDIT2:

val = struct.pack('!' + 'B' +'B' + 'B'*3 + '?', *(list(dct['bt_arr']) + list(dct['string'][0:3]) + [dct['boolean']]))