首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Read二进制表一次一行使用pyfits

Read二进制表一次一行使用pyfits
EN

Stack Overflow用户
提问于 2014-04-08 23:32:46
回答 1查看 812关注 0票数 0

我有一个60的FITS文件,其中包含一个二进制表。我想一次读(并处理)这个表一行/条目/行/块*。

(*我不确定正确的名称)

我使用的是化装,我想做的事情简单地归结为:

代码语言:javascript
复制
import pyfits

hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]

n_entries = hdulist[1].header['NAXIS2']

for i in xrange(n_entries):
    entry = hdulist[1].data[i]  # I am confused what happens at this step

    # now do stuff with the values in entry
    # .....

变量entry的类型为<class 'pyfits.fitsrec.FITS_record'>,其长度等于二进制表中的列数。然而,所发生的事情似乎是二进制表的整体被读取到内存中,这一行是:entry = hdulist[1].data[i]

我已经查看了pyfits文档,但我找不到任何方法,这些方法似乎是根据表条目(或一次读取一小组条目)从表条目上从二进制表扩展读取数据的。我不想从表中选择某些条目,只需按顺序扫描它们。

我想我的问题是:

0)在hdulist[1].data[i]步骤中发生了什么?为什么所有的东西都会被读到记忆里?(有办法绕过这件事吗?)

( 1)我是不是错过了什么,化装们真的能做我想做的事吗?

( 2)外面还有另一个蟒蛇库吗?(即在FITS扩展中使用二进制表)

3)如果没有,我是否可以用不同的二进制(或其他压缩/非ascii)格式重写数据(这不合适),并找到其他python库或模块来做我想做的事情?

EN

回答 1

Stack Overflow用户

发布于 2014-04-09 14:36:57

pyfits目前缺乏用于表的行迭代器。如果数据列不需要从磁盘上的存储格式转换为“物理”值,那么读取表是快速的。但是,否则,如果您尝试读取此类列,则当前会发生故障。在重写表接口时,我不会对此做太多的斗争,但同时,您可能希望尝试fitsio库,它是一个围绕CFITSIO的Python包装器,并提供了高效的基于行的表迭代。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22950177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档