2013-10-30 32 views
2

我有一個表的數據與頭一個ASCII文件,我想我的ASCII錶轉換爲配合與頭文件python如何將ascii錶轉換爲fit表?

#ID ra dec x y Umag Bmag Vmag Rmag Imag  
1.0 53.146 -27.8123 3422.98 3823.58 24.4528 24.7995 23.6266 22.64 20.8437 
2.0 53.1064 -27.801   3953.49 3994.62 23.3284 22.6716 22.1762 21.6189 21.2141 
3.0 53.1322 -27.7829 3608.34 4269.29 21.2676 20.1937 19.6743 19.0707 18.6983 
4.0 53.1017 -27.8022 4017.09 3975.24 23.6987 22.84 21.9946 21.0781 19.8616 
5.0 53.118 -27.8021 3798.98 3978.42 23.3087 22.1932 21.2205 20.1842 18.6448  
6.0 53.1479 -27.8239 3397.92 3648.27 25.0347 24.598 23.7259 22.9945 21.9228  
7.0 53.1334 -27.7758 3592.51 4375.76 21.5159 20.4777 19.6065 18.6609 17.188  
8.0 53.1048 -27.8259 3974.47 3617.5 22.3266 22.3517 22.0677 21.7664 21.6781  
9.0 53.1249 -27.8109 3706.47 3843.89 24.0539 23.3009 22.4001 21.4732 20.1244  
10.0 53.1207 -27.7822 3763.3 4278.76 24.417 23.7635 22.9405 22.1379 21.5564  
11.0 53.0886 -27.7611 4193.25 4596.77 22.012 22.3081 22.125 21.9488 21.9071  
12.0 53.1272 -27.7498 3676.7 4768.82 19.3631 19.7458 19.5979 19.4438 19.4002 

任何想法,我怎麼可能管理與蟒蛇做呢? 歡呼聲。

+0

你可以給我們一個期望的輸出樣本。 – jramirez

+1

您是否爲Python FITS庫google?我發現[包含](http://docs.astropy.org/en/stable/io/fits/index.html)的[astropy](http://www.astropy.org/)能夠處理FITS格式。 –

回答

6

我已經找到一種方法來解決我自己的問題: 讀取該文件作爲一個數組

import pyfits 
from scipy.io import * 
M=read_array(filename) 

奉獻每列頭名

c1=pyfits.Column(name='ID', format='E', array=M[:,0]) 
c2=pyfits.Column(name='RA', format='E', array=M[:,1]) 
c3=pyfits.Column(name='DEC', format='E', array=M[:,2]) 
c4=pyfits.Column(name='X', format='E', array=M[:,3]) 
c5=pyfits.Column(name='Y', format='E', array=M[:,4]) 
c6=pyfits.Column(name='Umag', format='E', array=M[:,5]) 
c7=pyfits.Column(name='Bmag', format='E', array=M[:,6])  
c8=pyfits.Column(name='Vmag', format='E', array=M[:,7])  
c9=pyfits.Column(name='Rmag', format='E', array=M[:,8])  
c10=pyfits.Column(name='Imag', format='E', array=M[:,9])  
cols = pyfits.ColDefs([c1, c2, c3, c4, c5, c6, c7, c8, c9, c10]) 

寫標題和列作爲適合檔案:

tbhdu = pyfits.new_table(cols) 
hdu = pyfits.PrimaryHDU(data=M) 
thdulist = pyfits.HDUList([hdu,tbhdu]) 
thdulist.writeto(outfilename) 
thdulist.close() 

它的工作!

0

儘管問題是關於如何通過Python來實現,但更簡單的方法是使用Topcat(目錄和表上的操作工具)。

該軟件的網站可以在THIS LINK HERE找到

Topcat可加載幾乎所有格式(ASCII,FITS,FITS +,CSV等)。 一旦你的表被加載,在這種情況下,一個ASCII表,你可以將它保存爲一個FITS文件,這與將.pptx文檔保存爲.pdf文檔的方式相同!一旦保存爲FITS文件,可以打開FITS文件,並且可以手動輸入列的標題!

這是非常快速和有用的,立即可以也繪製列而不必寫任何代碼。

0

necro post但由於我的一位朋友最近問我同樣的問題,無法讓您的解決方案工作我以爲我會添加一個簡單的函數,因爲我經常這樣做。

它具有允許使用自定義標題的靈活性,並保留ascii表中提供的相同列名(不必顯式輸入)。

def table2fits(tab, header=None): 
    ''' 
     takes the data from an ascii.table.Table and outputs 
     a pyfits.hdu.table.BinTableHDU, creating a blank 
     header if no header is provided 
    ''' 
    from astropy.io import fits 
    if header is None: 
     prihdr = fits.Header() 
     prihdu = fits.PrimaryHDU(header=prihdr) 
    else: 
     prihdu = fits.PrimaryHDU(header=header) 

    table_hdu = fits.BinTableHDU.from_columns(np.array(tab.filled())) 

return fits.HDUList([prihdu, table_hdu]) 

用法是

from astropy.io import ascii 
myasciitable = asii.read("/path/to/input.file") 
myfitstable = table2fits(myasciitable) 
myfitstable.writeto("/path/to/output.fits", clobber=True) 
1

轉換ASCII文件到FITS文件可以在一個更容易和更短的時間消耗的方式來完成。 一個可以使這種使用:文件將在當前工作目錄下創建如果不能提供絕對路徑

from astropy.io import ascii 
test_input = '../Data/test.txt' 
text_file = ascii.read(test_input) 
text_file.write('text_to_fits.fits') 

的擬合。

明線:(Astropy庫)

pip install --no-deps astropy 

您可以查看以下鏈接等基本要求。例如,numpy。 他們與上述聲明一起下載,如果不存在。所以不用擔心。

鏈接Astropy網站:http://docs.astropy.org/en/stable/install.html

您已經創建了FITS文件後,可以如下打開:

import astropy.table as at 
fits_file = '../Data/text_to_fits.fits' 
table = at.Table.read(fits_file) 

爲了操縱並與FITS文件時,你可以試試使用Astropy。 最初寫作天文相關數據集的主要目的,其中FITS文件是非常常用的,當涉及其他應用程序時,它也是一個非常有用的庫。

文檔:http://docs.astropy.org/en/stable/index.html

從輸入到輸出:

輸入ASCII文件:

col1 col2 col3 
1234 2345 3456 

輸出FITS文件:

Out[10]: 
<Table length=1> 
col1 col2 col3 
int64 int64 int64 
----- ----- ----- 
    1  2  3 

希望這有助於!