Чтение двоичной таблицы FITS по одной строке за раз, используя pyfits

У меня есть файл FITS 60 ГБ, содержащий двоичную таблицу. Я хотел бы прочитать (и обработать) эту таблицу по одной строке / записи / строке / блоку * за раз.

(* Я не уверен в правильной номенклатуре)

Я использую pyfits, и то, что я хотел бы сделать, сводится к просто:

import pyfits

hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]

n_entries = hdulist[1].header['NAXIS2']

for i in xrange(n_entries):
    entry = hdulist[1].data[i]  # I am confused what happens at this step

    # now do stuff with the values in entry
    # .....

Переменная entry имеет тип <class 'pyfits.fitsrec.FITS_record'> и имеет длину, равную количеству столбцов в двоичной таблице. Однако, похоже, что вся двоичная таблица считывается в память в этой строке: entry = hdulist[1].data[i],

Я просмотрел документацию по pyfits, но не могу найти какие-либо методы, которые, по-видимому, читают данные из расширения двоичной таблицы на основе записи таблицы (или небольших наборов записей за раз). Я не хочу выбирать определенные записи из таблицы, просто просматриваю их по порядку.

Я думаю, мои вопросы:

0) Что происходит на hdulist[1].data[i] шаг? Почему все читается в память? (есть ли способ обойти это?)

1) Я что-то пропустил и могут ли pyfits делать то, что я хочу?

2) Есть ли другая библиотека Python, которая будет? (т.е. используя двоичную таблицу в расширении FITS)

3) Если нет, могу ли я переписать данные в другом двоичном (или другом сжатом / не ascii) формате (который не является FITS) и найти какую-нибудь другую библиотеку или модуль python, чтобы делать то, что я хочу?

1 ответ

В настоящее время в pyfits отсутствует итератор строк для таблиц. Если столбцы данных таковы, что они не требуют преобразования из формата на диске в их "физические" значения, тогда чтение таблиц происходит быстро. Но в противном случае он в настоящее время взрывается, если вы пытаетесь читать такие столбцы. Я бы не стал слишком сильно бороться с этим, поскольку интерфейс таблицы переписывается, но в то же время вы можете попробовать библиотеку fitsio, которая является оболочкой Python для CFITSIO и обеспечивает эффективную итерацию таблиц на основе строк.

Другие вопросы по тегам