0

我有一个形式的字典:

a = {(7, 190, 0): {0: 0, 1: 10, 2: 10, 3: 37, 4: 45, 5: 49, 6: 69, 7: 45, 8: 130, 9: 59}}

并尝试将其以二进制格式写入文件。目前正在使用python 2.3

我尝试在一个简单的列表上使用 struct 模块,它看起来可以工作,但是当我继续使用 dict 时,它会抛出一个错误,指出所需的参数不是整数。什么是解决这个问题的好方法?我试过这样的:

packed_d=[]
for ssd,(add_val) in a.iteritems(): 
    pack_d=struct.pack('BHB',ssd)
    packed_data.append(pack_d)

这是它抛出错误的地方..

有什么建议么?

编辑:酷,这就是我所缺少的,珍妮。我尝试了以下,它看起来像它的工作,并且能够打开包装以及检查它是否一切正常。你认为这是一个好方法吗?谢谢!

data = {(7, 190, 0): {0: 0, 1: 101, 2: 7, 3: 0, 4: 0}}
packed_data=[]
for ssd,add_val in data.iteritems():
    pack_d=struct.pack('BHB', *ssd)
    packed_data.append(pack_d) 
    for add,val in data[ssd].iteritems():
        pack_t=struct.pack('BH', add,val) 
        packed_data.append(pack_t)

打包数据 = ['\x07\x00\xbe\x00\x00', '\x00\x00\x00\x00', '\x01\x00e\x00', '\x02\x00\x07\x00', '\x03 \x00\x00\x00', '\x04\x00\x00\x00']

4

2 回答 2

1

ssd是一个元组。通过在前面添加星号将其解压缩为单个参数:

struct.pack('BHB', *ssd)
于 2013-05-03T06:50:44.877 回答
1

你给 struct 'BHB' 格式,说你应该有三个参数,一个无符号字符,一个无符号短,然后是另一个无符号字符。

但是你只传递了一个论点。而且那个参数不是一个整数,而是一个整数元组。

这有效(在 Python 2.3 到 3.3 中测试):

import struct

a = {(7, 190, 0): {0: 0, 1: 10, 2: 10, 3: 37, 4: 45, 5: 49, 6: 69, 7: 45, 8: 130, 9: 59}}

packed_data=[]
for ssd in a: 
    packed_data.append(struct.pack('BHB', *ssd))

print(packed_data)

或者还有:

for a, b, c in a: 
    packed_data.append(struct.pack('BHB', a, b, c))

在更高版本的 Python 中,您会收到您没有足够参数的错误,这在这种情况下可能会更有帮助。

于 2013-05-03T06:45:56.383 回答