我正在尝试将一些数据从python脚本输出到二进制文件。
如果我有一个浮动列表,我一直在使用这个
out_file = open("filename", "wb")
float_array.array("f", [])
float_array.fromlist(mylist)
float_array.tofile(out_file)
out_file.close()
这似乎工作正常,至少它导致文件具有正确的字节数。
我如何使用复数列表来做同样的事情?
由于
答案 0 :(得分:2)
当Python提供了许多开箱即用的好方法时,不要发明自己的序列化方法!我建议你使用pickle - 它也适用于复数(*):
>>> import pickle
>>> s = pickle.dumps([1+2j, 5-1j])
>>> pickle.loads(s)
[(1+2j), (5-1j)]
我在这里使用dumps
进行演示,您也可以使用dump
写入二进制文件。
(*)来自泡菜文件:
可以腌制以下类型:
- 无,真,假
- 整数,长整数,浮点数,复数
- 普通和Unicode字符串
- 仅包含picklable的元组,列表,集和词典 对象
- 在模块顶层定义的功能
- 在模块顶层定义的内置函数
- 在模块顶层定义的类
__dict__
或__setstate__()
可挑选的此类类的实例(请参阅“泡菜”一节* 协议细节)
答案 1 :(得分:1)
您可以从复杂数组中创建一个展开的浮动列表,例如
flattend = [f for sublist in ((c.real, c.imag) for c in complex_list) for f in sublist]
并将此文件写入文件。