原链接: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

python pyfits的更多相关文章

  1. pyfits例子

    下面是一个读入fits文件,画积分强度图,再把某个星表里的天体画到图上的python程序. ====================================================== ...

  2. python binary lib on win/各种python库的二进制包

    虽然很不愿意在windows上折腾python,但有时linux不在身边的时候还得在windows上写代码.很久之前找到这个地址,后来忘了,今天搜了半天才把它找到,所以记录一下. http://www ...

  3. 【Python基础】安装python第三方库

    pip命令行安装(推荐) 打开cmd命令行 安装需要的第三方库如:pip install numpy 在安装python的相关模块和库时,我们一般使用“pip install  模块名”或者“pyth ...

  4. python模块大全

    python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...

  5. Python Extension Packages 下载

    Python Extension Packages下载 这个下载源资源丰富,python支持版本从2.x到3.7,从win32到win64位都有支持,是非常好资源. 特别留下记号备查. Index b ...

  6. LFD,非官方的Windows二进制文件的Python扩展包

    LFD,非官方的Windows二进制文件的Python扩展包 LFD,非官方版本.32和64位.Windows.二进制文件.科学开源.Python扩展包 克里斯托夫·戈尔克(by Christoph ...

  7. Windows Python Extension Packages

    备注: 1.先要安装wheel库:pip install wheel 2.下载wheel,切换至下载路径,然后安装:pip install wheel库名.whl Windows Python Ext ...

  8. python 不同版本下载资源

    Unofficial Windows Binaries for Python Extension Packages by Christoph Gohlke, Laboratory for Fluore ...

  9. 用于Python扩展包的非官方Windows二进制文件

    https://www.lfd.uci.edu/~gohlke/pythonlibs/ Index by date: peewee aiohttp indexed_gzip pygit2 pymatg ...

随机推荐

  1. Android的重力传感器(3轴加速度传感器)简单实例

    重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会 ...

  2. 【剑指offer】第一个仅仅出现一次的字符

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描写叙述: 在一个字符串(1<=字符串长度<=10000,所 ...

  3. SQL执行效率总结

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

  4. Hbase split的过程以及解发条件

    一.Split触发条件   1.  有任一一个Hfile的大小超过默认值10G时,都会进行split    2.  达到这个值不在拆分,默认为int_max,不进行拆分       3.compact ...

  5. hdoj 1013

    比较坑的一道题...直接做肯定WA http://acm.hdu.edu.cn/showproblem.php?pid=1013 #include<iostream> #include&l ...

  6. python--内建函数(1)

    Python中,按照对象是否可变,将类型分类为: 不可变类型:对象的内容不能够改变(not mutable),这些类型中主要有数值类型(整数,浮点数,复数),字符串类型,元组等 可变类型:对象的内容能 ...

  7. Sort list by merge sort

    使用归并排序对链表进行排序 O(nlgn) 的时间效率 /** * Definition for singly-linked list. * struct ListNode { * int val; ...

  8. js获取select默认选中的Option (非当前选中值)

    js函数方法: <script> function getDefaultSelectedOption(selectId, valIfNull) { var selectId = selec ...

  9. JS使用合并数组

    var arr= [4,5,6]; var arr1 = [7,8,9]; var arr2=[1,2,3]; arr.concat(arr1,arr2); //或者使用Arry.prototype. ...

  10. QT 强止杀进程

    bool KillProcess(QString ProcessName){  bool result = false; QString str1; HANDLE hSnapShot = Create ...