PyYITS:hdulist.writeto()

PyFITS: hdulist.writeto()

我正在从 multi-extension FITS 文件中提取扩展名,处理数据,并将数据(带有扩展名的 header 信息)保存到新的 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()

感谢您对此提供的任何帮助。提前致谢。

可能是因为你应该使用hdulist.writeto(file, clobber=True)。只有一个必需的参数: https://pythonhosted.org/pyfits/api_docs/api_hdulists.html#pyfits.HDUList.writeto 如果你给出第二个参数,它用于 output_verify 应该是一个字符串,而不是一个 numpy 数组。这可能解释了您的 AttributeError ....

您混淆了 HDUList.writeto method, and the writeto 函数

您呼叫的是method on the HDUList object that is returned when you call pyfits.open。您可以将此对象视为原始 drizzled FITS 文件的文件句柄。您可以就地操作此对象并将其写入新文件或就地保存更新(如果您在 mode='update' 中打开文件)。

另一方面,writeto函数不绑定到任何现有文件。它只是一个将数组写入文件的高级函数。在您的示例中,您可以像这样写出电子计数数组:

pyfits.writeto(filename, data)

这将创建一个单 HDU FITS 文件,其中包含主 HDU 中的阵列数据。

请注意文档这一部分顶部的警告:http://docs.astropy.org/en/v1.0.3/io/fits/index.html#convenience-functions

pyfits.writeto这样的函数是为了交互工作的方便,但不推荐在会重复运行的代码中使用,比如在脚本中。而是先看看 these instructions