Я пытаюсь навсегда изменить заголовки соответствия с помощью astropy hdu.writeto добавил None в мой файл соответствия

я хочу

  1. прочитать в файле соответствия
  2. изменить некоторые заголовки
  3. сохраните его с изменениями в новый файл подгонки.

Пока я думаю, что добился этого, однако в новом файле подгонок при использовании hdu.info () указано «Нет». Я не понимаю, что это значит, почему это там и плохо ли?

Я вставлю свой код ниже со связанными выходными данными:

from astropy.io import fits
hdulist = fits.open('2D_comb_ff_wavcal_red_sci_2.fits')
hdu = hdulist[0]
hdulist.info()
Filename: 2D_comb_ff_wavcal_red_sci_2.fits 
No.    Name      Ver    Type      Cards   Dimensions   Format 
 0  PRIMARY       1 PrimaryHDU     287   (1024, 1024)   float32  
print 'CRVAL1 then = ', hdu.header['CRVAL1']
print 'CRVAL2 then = ', hdu.header['CRVAL2']
CRVAL1 then =  14975.1660156 
CRVAL2 then =  1.0
CRVAL1_orig = hdu.header['CRVAL1']
CRVAL2_orig = hdu.header['CRVAL2']

hdu.header['CRVAL1'] = CRVAL2_orig
hdu.header['CRVAL2'] = CRVAL1_orig

print 'CRVAL1 now = ',  hdu.header['CRVAL1']
print 'CRVAL2 now = ',  hdu.header['CRVAL2']
CRVAL1 now =  1.0 
CRVAL2 now =  14975.1660156 
hdu.writeto('newheader.fits', overwrite=True)
new = fits.open('newheader.fits')
print new.info()
Filename: newheader.fits 
No.    Name      Ver    Type      Cards   Dimensions   Format 
  0  PRIMARY       1 PrimaryHDU     287   (1024, 1024)   float32   
None

Заголовки обновились (я проверил), но почему здесь написано «Нет»? Является ли hdu.writeto () неправильным? Я пробовал читать о flush (), но это меня смутило.

Спасибо


person E L    schedule 11.09.2018    source источник
comment
Ответ ниже правильный. Я просто добавлю, что вам почти никогда не нужно беспокоиться о методах файлового ввода-вывода, таких как flush() или даже close(). Если вы не понимаете, для чего они нужны, то, вероятно, вы не используете библиотеку на том уровне, на котором они вам понадобятся в первую очередь. Возможно, вам будет более поучительно распечатать сам заголовок, поскольку .info() сам по себе не так информативен.   -  person Iguananaut    schedule 12.09.2018


Ответы (1)


Это потому, что вы печатаете то, что возвращается из .info(). Обратите внимание, что в четвертой строке у вас есть

hdulist.info()

без print, но вы получите ожидаемый результат. кроме того, ты понимаешь правильно

0 PRIMARY 1 PrimaryHDU 287 (1024, 1024) float32 

когда вы звоните new.info(). Таким образом, выводит сам метод, который, вероятно, ничего не возвращает или не возвращает None по умолчанию, и, поскольку вы print, он отображается в виде строки.

Просто удали последний print.

person kabanus    schedule 11.09.2018
comment
Я добавлю, что, предполагая, что вы используете консоль или записную книжку IPython, вы можете запустить hdulist.info??, чтобы увидеть исходный код метода, и что он уже вызывает print() и не возвращает значение явно (все функции Python имеют возвращаемое значение по умолчанию. из None, если не дан явный return оператор) - person Iguananaut; 12.09.2018