簡體   English   中英

使用string和int類型打包列表,請使用struct.pack python

[英]Pack a list with string and int type use struct.pack python

對不起我的英語不好

我有一個類似的清單:

[['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()數據?

您可以做這樣的事情(快速編碼,可以使用一些工作)

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)

OUTPUT

('Stackoverflow', 32, 0, 'any stringgg', 55.0)
('anystring', 16, 1654657987984, 'striiingg', 2.5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM