我正在从多扩展名的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()我很感激你在这方面的帮助。提前谢谢。
发布于 2015-08-04 14:27:57
您混淆了HDUList.writeto方法和writeto函数。
您正在调用的是在调用方法时返回的HDUList对象上的一个pyfits.open。您可以将此对象视为类似于原始文件的文件句柄。您可以对此对象进行适当的操作,或者将其写入一个新文件,或者将更新保存在适当的位置(如果您在mode='update'中打开该文件)。
另一方面,writeto函数不绑定到任何现有文件。它只是一个高级函数,用于将数组写入文件。在您的示例中,您可以编写电子计数数组,如下所示:
pyfits.writeto(filename, data)这将与主HDU中的数组数据创建一个单一的HDU文件。
请注意文档本节顶部的警告:http://docs.astropy.org/en/v1.0.3/io/fits/index.html#convenience-functions。
像pyfits.writeto这样的函数在交互工作中很方便,但是不推荐在将重复运行的代码中使用,比如在脚本中。相反,先看看这些指示。
发布于 2015-08-01 12:23:33
这可能是因为您应该使用hdulist.writeto(file, clobber=True)。只有一个必需的参数:hdulists.html#pyfits.HDUList.writeto (如果给出第二个参数),它用于output_verify (应该是字符串,而不是numpy数组)。这可能解释了你的AttributeError ...。
https://stackoverflow.com/questions/31753093
复制相似问题