Как сохранить QTable в файл (.txt, .csv и т. Д.)

Я пытаюсь сохранить объект QTable, который происходит из списка Isophote с подходящей эллиптической изофотой, для действительно любого типа файла (.txt, .csv и т. Д.), Который позволяет мне просто загрузить его обратно в скрипт без необходимости очистки это или что-то в этом роде.

  • QTable создается следующим образом:
      example_isolist = ellipse_example.fit_image(sclip=3., nclip=3) #performing elliptical isophote fit and creating the Isophote list
example_isolist_tab = example_isolist.to_table() #converting to QTable
  • Моя попытка:
      import json
with open("example_isolist_tab.txt", 'w') as f:
    json.dump(example_isolist_tab, f, indent=2)

Использование json здесь не работает. Возникает следующая ошибка:

      TypeError: Object of type QTable is not JSON serializable

У кого-нибудь здесь есть опыт обработки данных фотошопа или сохранения изофоты, подходящей для файла? На самом деле это должно быть очень просто, просто способ, чтобы мне не приходилось перезапускать весь мой скрипт каждый раз, когда я хочу работать с результатами подбора изофоты. Весь мой набор данных содержит 26 изображений, что означает примерно 2,5 часа вычислений без сохранения между ними.

Заранее спасибо!

2 ответа

Используйте программу записи Astropy ECSV, чтобы написать QTable без потерь:

      >>> example_isolist_tab.write('example_isolist_tab.ecsv')
>>> t = QTable.read('example_isolist_tab.ecsv')  # returns the same table

Astropy уже имеет множество встроенных форматов для сохранения таблиц с помощью Table.write.

Для QTableв частности, если вам нужен текстовый формат с возможностью , настоятельно рекомендуется использовать формат циклического отключенияECSV , так как он также выводит метаданные, касающиеся типов и единиц каждого столбца. Если вы назовете свой файл .ecsvрасширение, этот формат используется автоматически. Например:

      >>> from astropy.table import QTable
>>> import astropy.units as u
>>> import numpy as np

>>> a = np.array([1, 4, 5], dtype=np.int32)
>>> b = [2.0, 5.0, 8.5]
>>> c = ['x', 'y', 'z']
>>> d = [10, 20, 30] * u.m / u.s

>>> t = QTable([a, b, c, d],
...            names=('a', 'b', 'c', 'd'),
...            meta={'name': 'first table'})

>>> t.write('table.ecsv')
      >>>  print(open('table.ecsv').read())
# %ECSV 0.9
# ---
# datatype:
# - {name: a, datatype: int32}
# - {name: b, datatype: float64}
# - {name: c, datatype: string}
# - {name: d, unit: m / s, datatype: float64}
# meta:
#   __serialized_columns__:
#     d:
#       __class__: astropy.units.quantity.Quantity
#       unit: !astropy.units.Unit {unit: m / s}
#       value: !astropy.table.SerializedColumn {name: d}
#   name: first table
# schema: astropy-2.0
a b c d
1 2.0 x 10.0
4 5.0 y 20.0
5 8.5 z 30.0

>>> QTable.read('table.ecsv')
<QTable length=3>
  a      b     c      d   
                    m / s 
int32 float64 str1 float64
----- ------- ---- -------
    1     2.0    x    10.0
    4     5.0    y    20.0
    5     8.5    z    30.0
Другие вопросы по тегам