将复数列表写为二进制数据

1 投票
2 回答
2510 浏览
提问于 2025-04-16 17:47

我正在尝试把一些数据从一个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]

然后把这个列表写入文件中。

撰写回答