Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从FITS文件头生成Ascii表_Python_Ascii_Astronomy_Fits - Fatal编程技术网

Python 从FITS文件头生成Ascii表

Python 从FITS文件头生成Ascii表,python,ascii,astronomy,fits,Python,Ascii,Astronomy,Fits,我想学习如何从FITS文件头获取信息并将该信息传输到ascii表。例如,这是我获取信息的方式: import pyfits a = pyfits.open('data.fits') header = a[0].header # Which should return something like this (It is BinHDUlist) SIMPLE = T / conforms to FITS standards

我想学习如何从FITS文件头获取信息并将该信息传输到ascii表。例如,这是我获取信息的方式:

import pyfits
a = pyfits.open('data.fits')
header = a[0].header # Which should return something like this (It is  BinHDUlist)
SIMPLE  =                T / conforms to FITS standards                    
                               / institution responsible for creating this file 
TELESCOP= 'Kepler  '           / telescope                                      
INSTRUME= 'Kepler Photometer'  / detector type                                  
OBJECT  = 'KIC 8631743'        / string version of KEPLERID                     
RA_OBJ  =           294.466516 / [deg] right ascension                          
DEC_OBJ =            44.751131 / [deg] declination                              
如何创建包含RA_OBJ和DEC_OBJ的ASCII表

编辑:我想创建一个.dat文件,其中包含来自标题的两列(RA和DEC)。下面是我正在尝试的一个例子:

import asciitable
import asciidata
import pyfits
import numpy as np

# Here I have taken all the fits files in my current directory and did the following:
# ls > z.txt so that all the fits files are in one place.

a = asciidata.open('z.txt')
i = 0 #There are 371 fits files in z.txt
while i<=370:
    b = pyfits.open(a[0][i])
    h = b[0].header
    RA = np.array([h['RA_OBJ']])
    DEC = np.array(h['DEC_OBJ']])
    asciitable.write({'RA': RA, 'DEC': DEC}, 'coordinates.dat', names=['RA', 'DEC'])
    i = i+1

相反,我的代码只是写在前面文件的键上。有什么想法吗?

我想你可能会从更仔细的阅读中受益。header属性是一个
pyfits.header.header
对象,它是一个类似字典的对象。因此,您可以执行以下操作:

import pyfits

keys = ['SIMPLE', 'TELESCOP', 'INSTRUME', 'OBJECTS', 'RA_OBJ', 'DEV_OBJ']

hdulist = pyfits.open("data.fits")
header = hdulist[0].header
for k in keys:
    print k, "=", header[k]
您可以添加更多奇特的输出,将结果字符串放入变量,检查缺少的键,等等

编辑

以下是如何将其与
asciitable
numpy
结合使用:

import asciitable
import numpy as np

keys = ['RA', 'DEC']
data = {}

# Initialize "data" with empty lists for each key
for k in keys:
    data[k] = []

# Collect all data in the "data" dictionary
for i in range(0, 50):
    data['RA'].append(np.array(i))
    data['DEC'].append(np.array(i+1))

asciitable.write(data, "coords.dat", names=keys)

我想你可能会从更仔细的阅读中受益。header属性是一个
pyfits.header.header
对象,它是一个类似字典的对象。因此,您可以执行以下操作:

import pyfits

keys = ['SIMPLE', 'TELESCOP', 'INSTRUME', 'OBJECTS', 'RA_OBJ', 'DEV_OBJ']

hdulist = pyfits.open("data.fits")
header = hdulist[0].header
for k in keys:
    print k, "=", header[k]
您可以添加更多奇特的输出,将结果字符串放入变量,检查缺少的键,等等

编辑

以下是如何将其与
asciitable
numpy
结合使用:

import asciitable
import numpy as np

keys = ['RA', 'DEC']
data = {}

# Initialize "data" with empty lists for each key
for k in keys:
    data[k] = []

# Collect all data in the "data" dictionary
for i in range(0, 50):
    data['RA'].append(np.array(i))
    data['DEC'].append(np.array(i+1))

asciitable.write(data, "coords.dat", names=keys)

感谢您的输入@Fabian Fagerholm,我对我的问题进行了编辑,希望您能够解决。您的建议确实有效,但我希望通过while循环将输出与许多其他.fits文件头中的键一起记录到.dat文件中。不要不断更改问题,我可能无法跟上!)似乎asciitable的设计目的是一次性写入所有数据。这是有意义的,因为例如,某些数据可能会更改所需的列宽。因此,在循环的每次迭代中都会覆盖该文件。无论如何,这里有一个方法可以做到:您需要制作一个以列为键的字典,每个值都应该是行的数据列表。所以在你的循环中,你会在数据['RA']和数据['DEC']中附加值,然后用ascitable来写整个过程。在循环之后写(数据…)。我真的不知道如何用键组成列。我明白你的意思,我只是不知道怎么做。@DaxFeliz:不用担心。我添加了一个示例来演示如何执行此操作。当然,你需要使它适应你的情况。这是一个练习基本Python数据结构的好机会。祝你好运!:)感谢您的输入@Fabian Fagerholm,我对我的问题进行了编辑,希望您能够解决。您的建议确实有效,但我希望通过while循环将输出与许多其他.fits文件头中的键一起记录到.dat文件中。不要不断更改问题,我可能无法跟上!)似乎asciitable的设计目的是一次性写入所有数据。这是有意义的,因为例如,某些数据可能会更改所需的列宽。因此,在循环的每次迭代中都会覆盖该文件。无论如何,这里有一个方法可以做到:您需要制作一个以列为键的字典,每个值都应该是行的数据列表。所以在你的循环中,你会在数据['RA']和数据['DEC']中附加值,然后用ascitable来写整个过程。在循环之后写(数据…)。我真的不知道如何用键组成列。我明白你的意思,我只是不知道怎么做。@DaxFeliz:不用担心。我添加了一个示例来演示如何执行此操作。当然,你需要使它适应你的情况。这是一个练习基本Python数据结构的好机会。祝你好运!:)