使用string和int类型打包一个列表结构包python

2024-10-02 20:42:43 发布

您现在位置: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']]

我打电话给:

^{pr2}$

是第一个子列表 以及

['Stackoverflow','32','0','any stringgg','55.0']

是第二个子列表,也是第三个子列表

如何使用结构包()基于第一个子列表类型的第二和第三个子列表中的数据?在


Tags: 类型列表stringtypeanyfloatstackoverflow结构
1条回答
网友
1楼 · 发布于 2024-10-02 20:42:43

你可以这样做(快速编码,可能需要一些工作)

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)

输出

^{pr2}$

相关问题 更多 >