Я пытаюсь вывести некоторые данные из python script в двоичный файл.
Если у меня есть список поплавков, я использовал этот
out_file = open("filename", "wb")
float_array.array("f", [])
float_array.fromlist(mylist)
float_array.tofile(out_file)
out_file.close()
Кажется, что это нормально, по крайней мере, это приводит к файлу с правильным количеством байтов.
Как я могу сделать то же самое, но используя список сложных чисел?
Спасибо
Вы можете создать сплющенный список поплавков из вашего сложного массива, например
flattend = [f for sublist in ((c.real, c.imag) for c in complex_list) for f in sublist]
и напишите это в файл.
Не придумывайте свои собственные методы сериализации, когда Python предлагает так много хороших из коробки! Я предлагаю вам использовать рассол - он также работает со сложными числами (*):
>>> import pickle
>>> s = pickle.dumps([1+2j, 5-1j])
>>> pickle.loads(s)
[(1+2j), (5-1j)]
Я использую dumps
для демонстрации здесь, вы также можете использовать dump
, который записывает в двоичный файл.
(*) Из документа рассола:
Можно мариновать следующие типы:
- Нет, True и False
- целые числа, длинные целые числа, числа с плавающей запятой, комплексные числа
- нормальные и Unicode строки
- кортежи, списки, наборы и словари, содержащие только picklable объекты
- функции, определенные на верхнем уровне модуля
- встроенные функции, определенные на верхнем уровне модуля
- которые определены на верхнем уровне модуля
- экземпляры таких классов, чья
__dict__
или__setstate__()
является picklable (см. раздел The pickle * протокол).