原链接: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 ...
随机推荐
- Foundation Sorting: Single List Insertion Sort
/* List Insertion Sorting. * Implementation history:. * 2013-09-15, Mars Fu, first version. */ #incl ...
- python命令行参数处理
使用argparse包来解析命令行参数: #/usr/bin/python #encoding=utf-8 import argparse parser = argparse.ArgumentPars ...
- Java面向对象的编程
类的多态性: Java语言中含有方法重载与成员覆盖两种形式的多态:(区别于c++) 方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同. 成员覆盖:子类与父类允许具有 ...
- 【转】emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so
[转]emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so ./emulator64-arm ...
- mysql 中的 IF 和 IFNULL 用法
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. IF(S ...
- c语言: 文件io, 拷贝文件(二进制)
#include <stdio.h> #include <stdlib.h> #define TRAN_SZIE 1024 int copy_bin(char* from, c ...
- Python网络编程——修改套接字发送和接收的缓冲区大小
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- mybatis用logback日志不显示sql的解决办法
mybatis用logback日志不显示sql的解决方法 1.mybatis-config.xml的设定 关于logimpl的设定值还不支持logback,如果用SLF4J是不好用的. 这是官方文档的 ...
- 建房子之前先挖地基 - Java BlockingQueue理解
最近一直在看<Think In Java>里关于并发部分的章节,读到第二十一章有一个有趣的比喻:必须先挖房子的地基,但是接下来可以并行的铺设钢结构和构建水泥部件,而这两项任务必须在混凝土浇 ...
- BNU 沙漠之旅
http://www.bnuoj.com/bnuoj/problem_show.php?pid=29376 我直接暴力搜索的. 剪枝: 1.步骤最多只有4步,超过4步则退出 2.油的行程相加后的总和距 ...