我有一堆写在FITS文件中的值。每列中有320,000个点...我需要的列是3列,称为detx,dety和energy。 我需要将这些数据用于我的程序。 我知道如何将此FITS文件转换为txt文件(如下所示),然后使用数据,但我如何直接使用数据?例如,我如何从这个FITS文件中获取数据,然后在python中打印出来?
以下是如何将装配文件转换为文本文件的示例:
from astropy.io import fits
#This is what the file is called
hdulist = fits.open('acisf02149N003_evt2.fits.gz')
hdulist.info()
tbdata = hdulist[1].data
#This prints it out into a text file
f=open('ChandraXraysources.txt','w+')
#This chooses only the detx, dety, and energy columns I was talking about
detxvect=tbdata.field('detx')
detyvect=tbdata.field('dety')
detzvect=tbdata.field('energy')
#This lists at the top of the text file the names of each column
f.write('Chandra X-ray source, RA(x),dec(y),energy \r\n')
for i in range(len(detxvect)):
f.write('%e %e %e\r\n' %(detxvect[i],detyvect[i],detzvect[i]))
print(detxvect[0])
答案 0 :(得分:0)
要直接使用数据,您可以尝试
import os, glob
from astropy.io import fits, ascii
# Open all files and store them into a list
files = glob.glob(dir + '*.fits')
hdu_lst = [fits.open(dir + fi) for fi in files]
#You choose the columns you'll be using
detx = [hdi[0].header['DETX'] for hdi in hdu_lst]
dety = [hdi[0].header['DETY'] for hdi in hdu_lst]
energy = [hdi[0].header['ENERGY'] for hdi in hdu_lst]
# You can also write a file with all the filenames
ascii.write([files, detx,dety,energy],'table.dat',names=(['Filename','DETX','DETY','ENERGY']),format = 'fixed_width',delimiter = '|',bookend = True,overwrite = True)
#Close all files at end
[hdi.close for hdi in hdu_lst]
答案 1 :(得分:0)
我知道如何将此FITS文件转换为txt文件(如下所示),然后使用数据,但我如何直接使用数据?例如,我如何从这个FITS文件中获取数据,然后在python中打印出来?
关于你究竟在问什么,你的问题非常混乱。具体来说,在您的示例中,您已经说明了如何直接使用表数据:
f.write('%e %e %e\r\n' %(detxvect[i],detyvect[i],detzvect[i]))
循环中的语句说明了这一点。
也就是说,只需使用detxvect
,detyvect
,detzvect
,就像使用任何numpy
1D数组一样。