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

时间:2011-05-17 09:45:57

标签: python

我正在尝试将一些数据从python脚本输出到二进制文件。

如果我有一个浮动列表,我一直在使用这个

out_file = open("filename", "wb")
float_array.array("f", [])
float_array.fromlist(mylist)
float_array.tofile(out_file)
out_file.close()

这似乎工作正常,至少它导致文件具有正确的字节数。

我如何使用复数列表来做同样的事情?

由于

2 个答案:

答案 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]

并将此文件写入文件。

相关问题