0

我有一堆值写在 FITS 文件中。每列大约有 320,000 个点...我需要的列是 3 列,分别称为 detx、dety 和 energy。我需要将这些数据用于我的程序。我知道如何将这个 FITS 文件转换成 txt 文件(如下图示例)然后使用数据,但是如何直接使用数据呢?例如,我如何从这个 FITS 文件中获取数据,然后在 python 中打印出来?

以下是如何将 fit 文件转换为文本文件的示例:

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]) 
4

2 回答 2

0

我知道如何将这个 FITS 文件转换成 txt 文件(如下图示例)然后使用数据,但是如何直接使用数据呢?例如,我如何从这个 FITS 文件中获取数据,然后在 python 中打印出来?

关于您到底要问什么,您的问题非常令人困惑。具体来说,在您的示例中,您已经说明了如何直接使用表数据:您的

f.write('%e  %e  %e\r\n' %(detxvect[i],detyvect[i],detzvect[i]))

循环中的语句说明了这一点。

也就是说,只需使用detxvect, detyvectdetzvect就像使用任numpy何一维数组一样。

于 2017-07-26T17:05:44.637 回答
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]
于 2017-07-26T16:43:02.370 回答