2014-10-06 69 views
-1

我需要将浮点数,整数和字符串转换为字节数组。这是Python2.7。浮点数,int和str到字节数组 - python

我知道如何与花车和整数做到这一点(为花车仅,例如,struct.pack("{}f".format(len(float_array)), float_array)),并用绳子我假设一个只想做list((map(ord, string)) for string in str_list)

那么,有没有办法做到这一切,如果一切都混在一起。在最小的时候,我希望能够混合浮点数和整数,而不必遍历每一个。

如果我必须遍历每一个,我怎么能做到这一点快速和有效。 (注意:我必须通过一个数据列表 - 现在的每个数据都是一个float或一个int,但是我也知道哪个索引应该是int或float(但我不应该需要知道这一点) - 并且最好简单地将列表转换为另一个字节数组列表(或者实际上只是一个字符串,例如“\ xasdf \ xadf \ xasdf”)。)

例如:[1, 1.0] ==>字节数组(或更复杂[1, 1.0, "a"] ==> bytearray

注:我得到一个错误,当我这样做:

import struct 
num_list = [1, 1.0] 
num_struct = struct.pack("2f", num_list) 

而不是当我这样做:

import struct 
num_list = [1.0, 2.0] 
num_struct = struct.pack("2f", num_list) 
+1

这不明显,你想要什么,你有什么,以及你期望如何达到你的目标。请**举例输入和输出**需要和*解释*你一直在试图做到这一点。 – Veedrac 2014-10-06 18:59:57

+0

我有一个int/float列表('[1,1.0]');我想要一个类似长度的列表,表示为一个字节数组**和**我不想检查每一个是for循环中的int还是浮点数。 – dylnmc 2014-10-06 19:01:36

+0

你想要什么仍然不明显; “bytearray”是什么意思? – Veedrac 2014-10-06 19:03:53

回答

4
def pack_all(lst): 
    fmt = ''.join('i' if isinstance(x, int) else 'd' for x in lst) 
    return struct.pack(fmt, *lst) 

这种处理整数和浮点数(双尺寸)。字符串最好分开处理,最好使用encode

+0

谢谢。我猜;幸运的是,我只是找到了一种只有浮游物的方法。谢谢 – dylnmc 2014-10-06 19:13:11

+0

哦,我有另一个错误,所以包实际上处理整数和浮动... jynx – dylnmc 2014-10-06 19:14:08