将复数列表写为二进制数据
我正在尝试把一些数据从一个Python脚本输出到一个二进制文件。
如果我有一个浮点数的列表,我一直在使用这个
out_file = open("filename", "wb")
float_array.array("f", [])
float_array.fromlist(mylist)
float_array.tofile(out_file)
out_file.close()
这似乎运行得很好,至少生成的文件字节数是正确的。
那我该如何用一个复数的列表来做同样的事情呢?
谢谢
2 个回答
2
别自己发明序列化的方法,Python已经提供了很多好用的选项!我建议你使用pickle,它也能处理复杂数字(*):
>>> import pickle
>>> s = pickle.dumps([1+2j, 5-1j])
>>> pickle.loads(s)
[(1+2j), (5-1j)]
这里我用的是dumps
来演示,你也可以使用dump
,它可以把数据写入一个二进制文件。
(*) 来自pickle的文档:
以下类型的数据可以被序列化:
- None、True和False
- 整数、长整数、浮点数、复杂数字
- 普通字符串和Unicode字符串
- 只包含可序列化对象的元组、列表、集合和字典
- 在模块顶层定义的函数
- 在模块顶层定义的内置函数
- 在模块顶层定义的类
- 这些类的实例,其
__dict__
或__setstate__()
是可序列化的(详细信息见pickle协议部分)
1
你可以把复杂的数组变成一个简单的浮点数列表,像这样:
flattend = [f for sublist in ((c.real, c.imag) for c in complex_list) for f in sublist]
然后把这个列表写入文件中。