バイナリでファイルに書き込みたい次の辞書があります。
data = {(7, 190, 0): {0: 0, 1: 101, 2: 7, 3: 0, 4: 0},
(7, 189, 0): {0: 10, 1: 132, 2: 17, 3: 20, 4: 40}}
この方法で struct モジュールを使用することにしました。
packed=[]
for ssd, add_val in data.iteritems():
# am trying to using 0xcafe as a marker to tell me where to grab the keys
pack_ssd = struct.pack('HBHB', 0xcafe, *ssd)
packed.append(pack_ssd)
for add, val in data[ssd].iteritems():
pack_add_val = struct.pack('HH', add, val)
packed.append(pack_add_val)
この出力はパックされています = ['\xfe\xca\x07\x00\xbe\x00\x00', '\x00\x00\x00\x00', '\x01\x00e\x00', '\x02\x00 \x07\x00'、'\x03\x00\x00\x00'、'\x04\x00\x00\x00'、'\xfe\xca\x07\x00\xbd\x00\x00'、'\x00\x00 \n\x00'、'\x01\x00\x84\x00'、'\x02\x00\x11\x00'、'\x03\x00\x14\x00'、'\x04\x00(\x00']
その後、これをバイナリ ファイルとして書き込みます。
ifile = open('test.bin', 'wb')
for pack in packed:
ifile.write(pack)
バイナリ ファイルは次のようになります。 \x00\x00\x04\x00\x00\x00\xfe\xca\x07\x00\xbd\x00\x00\x00\x00\n\x00\x01\x00\x84\x00\x02\x00\x11\x00 \x03\x00\x14\x00\x04\x00(\x00'
データを解凍するまでは問題ありません。ここで、バイナリ ファイルの内容を読み取り、最初に辞書がどのように表示されたかに戻します。これは私がそれを解凍しようとした方法ですが、常にエラーが発生していました:
unpack=[]
while True:
chunk = ifile.read(log_size)
if len(chunk) == log_size:
str = struct.unpack('HBHB', chunk)
unpack.append(str)
chunk = ifile.read(log1_size)
str= struct.unpack('HH', chunk)
unpack.append(str)
Traceback (most recent call last):
File "<interactive input>", line 7, in ?
error: unpack str size does not match format
解凍しようとした方法では常に問題が発生することはわかっていますが、バイナリ ファイルの内容を解凍する良い方法が見つからないようです。どんな助けでも大歓迎です..