PyFITS: hdulist.writeto()

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

Насколько мне известно, pyfits.writeto() выполняет эту задачу. Однако, когда я даю ему параметр данных в виде массива, он дает мне ошибку:

    'AttributeError: 'numpy.ndarray' object has no attribute 'lower''

Вот пример моего кода:

    'file = 'hst_11166_54_wfc3_ir_f110w_drz.fits'
     hdulist = pyfits.open(dir + file)'
     sci = hdulist[1].data # science image data
     exp = hdulist[5].data # exposure time data
     sci = sci*exp # converts electrons/second to electrons
     file = 'test_counts.fits'

     hdulist.writeto(file,sci,clobber=True)

     hdulist.close()

Я ценю любую помощь в этом. Заранее спасибо.


person maelstromscientist    schedule 31.07.2015    source источник
comment
Даже если можете, избегайте использования имени переменной file, так как в Python оно означает sth. Кроме того, у вас есть лишние ' перед file, это ошибка, которую вы сделали при копировании кода? Кроме того, мы можем увидеть весь код? Ошибка говорит о методе lower, но я не вижу его в вашем коде.   -  person tomasyany    schedule 01.08.2015


Ответы (2)


Вы путаете HDUList.writeto метод и writeto функция.

Вы вызываете метод на HDUList, возвращаемый при вызове pyfits.open. Вы можете думать об этом объекте как о чем-то вроде дескриптора вашего исходного файла FITS. Вы можете манипулировать этим объектом на месте и либо записать его в новый файл, либо сохранить обновления на месте (если вы откроете файл в mode='update').

С другой стороны, writeto функция не привязана к какому-либо существующему файлу. Это просто функция высокого уровня для записи массива в файл. В вашем примере вы можете записать свой массив электронных счетчиков, например:

pyfits.writeto(filename, data)

Это создаст файл FITS для одного HDU с данными массива в ОСНОВНОМ HDU.

Помните о предупреждении в верхней части этого раздела документации: http://docs.astropy.org/en/v1.0.3/io/fits/index.html#convenience-functions

Такие функции, как pyfits.writeto, предназначены для удобства интерактивной работы, но их не рекомендуется использовать в коде, который будет выполняться многократно, как в скрипте. Вместо этого взгляните на эти инструкции для начала.

person Iguananaut    schedule 04.08.2015

Вероятно, это потому, что вы должны использовать hdulist.writeto(file, clobber=True). Есть только один обязательный аргумент: https://pythonhosted.org/pyfits/api_docs/api_hdulists.html#pyfits.HDUList.writeto Если вы указываете второй аргумент, он используется для output_verify, который должен быть строкой, а не пустым массивом. Это, вероятно, объясняет ваш AttributeError ....

person saimn    schedule 01.08.2015
comment
Хотя вы правы в том, что они не передают корректные аргументы методу writeto, скорее они путают два разных интерфейса в API. Смотрите мой ответ. - person Iguananaut; 04.08.2015