• python pyfits


    原链接: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使用教程

  • 相关阅读:
    个人信息
    两个整数的最小公倍数和最大公约数
    java杨辉三角实现
    只会用这简单的递归求阶乘
    图形界面设计
    圆的面积,周长,圆柱体的体积(类的封装与抽象)
    杨辉三角
    1~10的阶乘java语言编程
    个人信息与计算器
    个人信息显示界面
  • 原文地址:https://www.cnblogs.com/heshangaichirou/p/5200570.html
Copyright © 2020-2023  润新知