原链接:http://blog.sina.com.cn/s/blog_a046022d0101a48h.html,全文复制以备出错。
导入pyfits模块:import pyfits
(1)打开fits文件:
hdulist = pyfits.open( '/home/huang/test.fits' )
(2)查看fits里面存了什么:
一个fits文件至少包含一个主头文件,可以有也可以没有扩展头。主头存任意维数组(不能存字符),扩展头存表格(table,表格形式任意,可存字符、数字等,例如存星表)。
hdulist.info()
No. Name Type Cards Dimensions Format
0 PRIMARY PrimaryHDU 7 () int32
1 BinTableHDU 26 3072R x 1C [1024E]
(3)查看数据描述,即header:
不同的头有不同的header,
看[0]PrimaryHDU的header:
hdulist[0].header.items()
看[1]BinTableHDU的header(用healpix Haslam图作例子):
hdulist[1].header.items()
得到结果如:
[('XTENSION', 'BINTABLE'),
('BITPIX', 8),
('NAXIS', 2),
('NAXIS1', 8),
('NAXIS2', 3145728),
('PCOUNT', 0),
('GCOUNT', 1),
('TFIELDS', 2),
('TTYPE1', 'TEMPERATURE'),
('TFORM1', 'E'),
('TUNIT1', 'K'),
('TTYPE2', 'N_OBS'),
('TFORM2', 'E'),
('TUNIT2', 'counts'),
('EXTNAME', 'ARCHIVE MAP TABLE'),
('DATE', '2003-02-05T00:00:00'),
('PIXTYPE', 'HEALPIX'),
('ORDERING', 'NESTED'),
('NSIDE', 512),
('FIRSTPIX', 0),
('LASTPIX', 3145727)]
可看到,hdulist[1]储存的是temperature,单位是K,healpix类型为nested,nside=512共3145728像素。
(4)取fits数据:
fits数据有两种,一是数组(数字)数据,二是table数据。两者都用同一个函数 .data (注意不是.data(),没有())
取数组数据:data1 = hdulist[0].data
取table数据:data2 = hdulist[1].data
(5)修改header
先取出header:
hdr = hdulist[1].header
(这里的hdr与hdulist共用地址,因此hdr变了hdulist也跟着变。而hdulist[1].header.items()只用来显示)
1、修改header的值(下面添加header的.set()也能修改值):
header取值可用keyword和序号取,如(3)所示的header,要取得('PIXTYPE', 'HEALPIX')有两种方法:
keyword:hdr['PIXTYPE'](注意,在header中,字母不分大小写)
序号:hdr[-5]或hdr[16]
现在hdr['PIXTYPE']的值为’HEALPIX',改为’test':
hdr['PIXTYPE'] = 'test'
2、添加header:
hdr.append和hdr.insert都可以添加header,但它们功能很少且可以添加重复的keyword造成混乱。
添加和修改header最好用 .set()
1.修改header的值,如果keyword不存在则在末尾创建:
例如修改('PIXTYPE', 'HEALPIX')的值:
hdr.set('PIXTYPE', 'test')
如果keyword不小心错写成’PAXTYPE’,则会在原header末尾创建('PAXTYPE', 'test')
2.在某个keyword前后添加:
hdr.set('en', 'haha', before='PIXTYPE')
在’PIXTYPE’前面添加('en','haha')
在后面添加则为
hdr.set('en', 'haha', after='PIXTYPE')
另外,before和after=可以为序号如before=10
3.header除了keyword和值之后,还可有“解释”,其实set的完整命令为:
一、set( 原keyword, 新值, 解释 )
hdr.set('PIXTYPE', 'test', 'explain this header')
二、set( 新keyword, 新值, 解释, after=原keyword )
hdr.set( 'add', 'new', 'this is a new header', after='PIXTYPE' )
解释可有可无。
注意,set不可以新建重复已存在的keyword。
3、删除header:
del hdr['PIXTYPE'] 或 del hdr[16]
删除一段:del hdr[5:10]
把del放前面。
(6)保存修改:
hdulist.writeto( 'new_name.fits' )
注意,保存的文件名要是新名字,如果当前文件夹下已经有相同文件名存在,则出错而不能保存。
(7)保存任意维数组数据(不含字符):
1、A是要储存的N维数组
2、Create a PrimaryHDU object to encapsulate the data:
hdu = pyfits.PrimaryHDU(A)
3(1)、Then create a HDUList to contain the newly created primary HDU:
hdulist = pyfits.HDUList([hdu])
hdulist.writeto(’A.fits’)
3(2)、pyfits提供一个合并步骤处理上面的3(1)的两步(3(2)和3(1)是完全等价的)
hdu.writeto(’A.fits’)
(8)将table保存为FITS文件:
用以下的例子来说明:
table以“列”为单位,下面的table有3列,第一列是字符(名称),第二列是数字(值)
a1 = np.array(['NGC1001', 'NGC1002', 'NGC1003'])
a2 = np.array([11.1, 12.3, 15.2])
a3 = np.array([250, 213, 36])
col1 = pyfits.Column(name='source', format='20A', array=a1)
col2 = pyfits.Column(name='V_magitude', format='E', array=a2)
col3 = pyfits.Column(name='random_number', format='I', array=a3)
cols = pyfits.ColDefs([col1,col2,col3])
# 就算只有一列,也可写 []:cols = pyfits.ColDefs([col1])
# 选择2是新方法;选择1是旧方法,在新版本中可能会去掉
选择1:tbhdu = pyfits.TableHDU.from_columns(cols)
选择2:tbhdu = pyfits.new_table(cols)
tbhdu.writeto('outname.fits')
Column函数:
pyfits.Column(name, format, unit, null, bscale, bzero, disp, start, dim, array, ascii)
全部参数的默认值都是None。
参数名对应header的keyword为:
name -> column name, TTYPE
format -> value format, TFORM
unit -> TUNIT
null -> null value, TNULL
scale -> bscale value, TSCAL
bzero -> bzero value, TZERO
dis -> display format, TDISP
start -> column starting position (ASCII table only), TBCOL
dim -> dimension, TDIM
(9)有效储存format

- pyfits例子
下面是一个读入fits文件,画积分强度图,再把某个星表里的天体画到图上的python程序. ====================================================== ...
- python binary lib on win/各种python库的二进制包
虽然很不愿意在windows上折腾python,但有时linux不在身边的时候还得在windows上写代码.很久之前找到这个地址,后来忘了,今天搜了半天才把它找到,所以记录一下. http://www ...
- 【Python基础】安装python第三方库
pip命令行安装(推荐) 打开cmd命令行 安装需要的第三方库如:pip install numpy 在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“pyth ...
- python模块大全
python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...
- Python Extension Packages 下载
Python Extension Packages下载 这个下载源资源丰富,python支持版本从2.x到3.7,从win32到win64位都有支持,是非常好资源. 特别留下记号备查. Index b ...
- LFD,非官方的Windows二进制文件的Python扩展包
LFD,非官方的Windows二进制文件的Python扩展包 LFD,非官方版本.32和64位.Windows.二进制文件.科学开源.Python扩展包 克里斯托夫·戈尔克(by Christoph ...
- Windows Python Extension Packages
备注: 1.先要安装wheel库:pip install wheel 2.下载wheel,切换至下载路径,然后安装:pip install wheel库名.whl Windows Python Ext ...
- python 不同版本下载资源
Unofficial Windows Binaries for Python Extension Packages by Christoph Gohlke, Laboratory for Fluore ...
- 用于Python扩展包的非官方Windows二进制文件
https://www.lfd.uci.edu/~gohlke/pythonlibs/ Index by date: peewee aiohttp indexed_gzip pygit2 pymatg ...
随机推荐
- projecteuler---->problem=8----Largest product in a series
title: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 ...
- Objective-c 访问控制
在Objective-c中定义类时,也可以使用类似于C++中public.private来修饰成员变量,如下: @intterface Test:NSObject{ @public int i; in ...
- Android 中文API (66) —— BluetoothClass.Device
前言 本章内容是android.bluetooth.BluetoothClass.Device,为Android蓝牙部分的章节翻译,版本为Android 2.3 r1,翻译来自中山大学的" ...
- .Net将多个DLL打包为一个DLL(ILMerge)
在做.Net底层编码过程中,为了功能独立,有可能会生成多个DLL,引用时非常不便.这方面微软提供了一个ILMerge工具原版DOS工具,可以将多个DLL合并成一个.下载完成后需要安装一下,然后通过DO ...
- HTML5 Web Storage使用实例
很久没写文章了,忙加懒实在没办法,之前也看过关于Web Storage的文章,当时就觉得各各浏览器的支持跟上来还早着呢,像我们这样做门户网站的一时半会儿也用不上,毕竟用户群体鱼目混杂嘛,最近各各浏览器 ...
- Oracle存储包存储及案例
Package左侧文件: create or replace package S02_ZFRZPT_YS_MID is procedure start_cal(strgranularity in va ...
- Arduino 跷跷板(2016-01-04)
前言这是参加社区活动,用赠送的 LilyPad 来做小实验,也体验了一把艺术的LilyPad!本来是申请 nano 的,不知道怎么的就出错啦,申请成 LilyPad 了,这个实验应该用 nano 比较 ...
- android studio 安装与环境搭建
转摘自:http://blog.csdn.net/zhanghefu/article/details/9286123 第一章 andriod studio 安装与环境搭建 一.Android St ...
- Kqueue与epoll机制
首先介绍阻塞与非阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做):那么你可以去睡觉了,因为你知道快递把货送来 ...
- linux系统调用和库函数调用的区别(转)
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).可以参考<Linux程序设计>(英文原版为<Beginning ...