1

私の英語でごめんなさい

次のようなリストがあります。

[['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']

は 2 番目のサブリストで、3 つのサブリストと同じです

最初のサブリストのタイプに基づいて、2 番目と 3 番目のサブリストで struct.pack() データを使用するにはどうすればよいですか?

4

1 に答える 1

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)
于 2012-08-16T04:23:58.247 に答える