将不同类型的列表写入二进制文件

时间:2018-01-26 13:50:24

标签: python python-3.x

我有一个列表变量airMod,由不同类型的数据组成: char,uint32和float 。以下是我在visual studio代码调试模式中的样子:

enter image description here

现在我想将它保存在二进制文件中(原始缓冲区。我将使用C ++逐字节处理它)。我想知道我应该怎么做。我搜索了它应该如何完成,但主要是保存包含相同数据类型的列表的解决方案(例如bytearrayto_byte .....)。

我想保存数据,然后用C ++(fseek, tellg, ifstream等)进行处理。谢谢。

1 个答案:

答案 0 :(得分:0)

使用内置的struct模块,如下所述:https://docs.python.org/3/library/struct.html

您可以使用它将一组对象(通常是数字)序列化为字节。例如:

import struct

with open('outfile', 'wb') as out:
    out.write(struct.pack('<if', 123, 456.789))

这将编写一个8字节的文件,可以使用这样的C或C ++结构进行解释,假设您使用的是像x86这样的小端机器:

struct MyRecord {
    int32_t x;
    float y;
};

在C或C ++中定义这样的结构时,必须注意字段的对齐,填充和字节顺序。如果您使用GCC或Clang并且可能包含未对齐字段,则__attribute__((packed))__非常有用。

Python中的另一个选择是使用NumPy&#34;结构化数组&#34;。你可以创建一个这样的:

import numpy as np
rec = np.array([100, 456.789], [('x', 'i4'), ('y', 'f4')])
with open('outfile', 'wb') as out:
    out.write(rec.tobytes())