原链接: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 ...
随机推荐
- python 面试相关
python单例模式: Python真的需要单例模式吗?我指像其他编程语言中的单例模式. 答案是:不需要! 因为,Python有模块(module),最pythonic的单例典范.模块在在一个应用程 ...
- [译]Stairway to Integration Services Level 13 - SSIS 变量回顾
介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...
- MBProgressHUD简单使用
使用HUD最多的情形用于请求等待提示 例如做登录的时候在确认登陆的时候可以用HUD提示正在登陆. 最基本的使用 初始化 //self.view代表在哪个view中显示hud MBProgressHUD ...
- Struts2详解
struts2框架是SSH框架集中的框架之一,是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器层(Controller)来建立 ...
- Javah生成JNI头文件
首先确保java的环境变量配置好了. 1:打开cmd 进入doc命令窗口: 进入class所在目录,我的class是在F:\summerVacation\ndkhelloworld\bin\class ...
- 转:STL使用入门( Using STL)
1 介绍 我最开始结束C++编程是从DOS下的Borland C++开始的.那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东.当我开始使用Visual C++ 2 ...
- STL assign 和swap
首先看下在整个container上面的复制. c1=c2 可以等同于 c1.erase(c1.begin(),c1.end()) //delete all elems in c1 c1.insert( ...
- 51cto运维培训课程
线路图: Linux运维架构师 基础提高篇(120课时) 基础提高篇(240课时) Linux系统基础及系统管理 Shell编程入门及进阶 linux安全管理和企业级安全防范策略 企业级集群/存储专题 ...
- Java学习之IO之File类二
之前学了File便想把我学习视频的名字改了,因为文件名太长不好看,便试着写了个功能实现 package com.gh.file; import java.io.File; /** * 批量文件命名 * ...
- bootstrap框架开发电子商城案例
bootstrap框架开发电子商城案例 玛图 bootstrap 商城框架