astropy.io.适合历史#

在纳入Astropy之前 astropy.io.fits package was a stand- alone package called PyFITS . PyFITS不再被积极地维护,它的发展现在完全是一个天文现象。本页记录了PyFITS在并入Astropy之前的发布历史。

3.4.0(2016-01-29)#

这是PyFITS作为独立包的最新发布版本。

3.3.0(2014-07-17)#

新特点#

  • 添加了新的验证选项 fix+ignorefix+warnfix+exceptionsilentfix+ignoresilentfix+warnsilentfix+exception 这样可以更好地控制如何报告可修复的错误,而不是不可修复的错误。有关更多详细信息,请参阅PyFITS文档中的“验证”部分。

API更改#

  • 这个 pyfits.new_table 函数现在已被完全弃用(不过考虑到它的使用范围,在很长一段时间内不会被删除)。

    相反,请使用更明确的 pyfits.BinTableHDU.from_columns 创建一个新的二进制表HDU,以及类似的 pyfits.TableHDU.from_columns 创建新的ASCII表。否则,它们接受的参数与 pyfits.new_table 现在只是这些的包装。

  • 这个 .fromstring 每个HDU类型的classmethod都经过了简化,使得它只从包含其头的字符串初始化HDU and 数据。(太空望远镜/PyFITS#64)

  • 修正了头通配符匹配(例如 header['DATE*'] )可用于匹配 any 关键字中可能出现的字符。以前这只匹配集合中包含字符的关键字 [0-9A-Za-z_] . 现在这也可以匹配连字符 - 还有其他的角色,就像一些惯例一样 HIERARCH 而且记录值关键字卡允许的有效字符范围比标准的FITS关键字更广泛。

  • 这将是 last 发布以支持以下自PyFITS v3.1以来标记为已弃用的API:

    • 这个 CardList 类,它是旧标头实现的一部分。

    • 这个 Card.key 属性。使用 Card.keyword 相反。

    • 这个 Card.cardimageCard.ascardimage 属性。简单使用 Card.imagestr(card) 相反。

    • 这个 create_card 工厂功能。只需使用普通 Card 改为构造函数。

    • 这个 create_card_from_string 工厂功能。使用 Card.fromstring 相反。

    • 这个 upper_key 功能。使用 Card.normalize_keyword 方法(这不太可能在PyFITS本身之外使用,但它在技术上是公共API)。

    • 用法 Header.update 具有 Header.update(keyword, value, comment) 争论。 Header.update 只能类似于 dict.update . 使用 Header.set 相反。

    • 这个 Header.ascard 属性。使用 Header.cards 而不是列出所有 Card 标题中的对象。

    • 这个 Header.rename_key 方法。使用 Header.rename_keyword 相反。

    • 这个 Header.get_history 方法。使用 header['HISTORY'] 相反(普通的关键字查找)。

    • 这个 Header.get_comment 方法。使用 header['COMMENT'] 相反。

    • 这个 Header.toTxtFile 方法。使用 header.totextfile 相反。

    • 这个 Header.fromTxtFile 方法。使用 Header.fromtextfile 相反。

    • 这个 pyfits.tdumptcreate 功能。使用 pyfits.tabledumppyfits.tableload 分别。

    • 这个 BinTableHDU.tdumptcreate 方法。使用 BinTableHDU.dumpBinTableHDU.load 分别。

    • 这个 txtfile 论据 Header 建造师。使用 Header.fromfile 相反。

    • 这个 startColumnendColumn 的参数 FITS_record 建造师。这些不太可能被任何用户代码使用。

    在v3.3版本之后,这些不推荐使用的接口将从PyFITS的开发版本中删除(但是,它们仍然可以在任何v3.3.x错误修复版本中使用)。

其他变更和增补#

  • PyFITS已经切换到统一的代码库,它可以同时支持python2.5到3.4,而无需翻译。这个 不应该 有任何显著的性能影响,但如果有明显的慢,请报告。作为一个提醒,PyFITS 3.3.x之后将结束对Python 2.5的支持。

  • 默认情况下,PyFITS中不推荐使用的API的警告始终显示。这与最近对Astropy的一个类似变化是一致的:astropy/astropy#pull/1871要在脚本中禁用PyFITS弃用警告,可以调用 pyfits.ignore_deprecation_warnings() 导入PyFITS后。

  • Card 对象有一个新的 is_blank 返回的属性 True 如果卡片代表一张空白卡片(没有关键字、值或注释),并且 False 否则。

漏洞修补#

  • 修复了无法将空的“压缩”图像保存到文件中的回归(在本例中,没有任何内容可压缩,因此引用了引号,但尝试这样做会导致崩溃)。(太空望远镜/PyFITS#69)

  • 修正了在v3.2.1中引入的一个回归,它编写压缩图像hdu,特别是使用非空GZIP_compressed_数据列的压缩图像。(太空望远镜/#71)

3.2.4(2014-06-02)#

  • 修复了一个回归,其中 writeto 方法在同一HDU上但指向不同的文件可能导致数据损坏或在第一次调用之后的后续调用中崩溃。(太空望远镜/PyFITS#40)

3.2.3(2014-05-14)#

  • 对Python3.4的名义支持。

  • 修复了使用 tabledumptableload 包含数组列(其中每个元素是数组而不是单个标量值的列)的函数。(太空望远镜/PyFITS#22)

  • 修正了PyFITS允许在头值和注释中使用换行符的问题。(太空望远镜/PyFITS#51)

  • 固定酸洗 FITS_rec (表数据)对象。(太空望远镜/PyFITS#53)

  • 通过删除对平台体系结构的不必要检查,改进了在OSX上编写大型压缩图像时的行为。(太空望远镜/PyFITS#57)

  • 允许从没有 .closed 属性(因此甚至可能没有“开放”与“封闭”的概念)。(太空望远镜/PyFITS#56)

  • 修正了在压缩图像标题上重复插入注释关键字的问题。(太空望远镜/PyFITS#58)

  • 修正了标题评论卡值比较的小问题。(太空望远镜/PyFITS#59)

3.1.6(2014-05-14)#

  • 对Python3.4的名义支持。

  • 修复了使用 tabledumptableload 包含数组列(其中每个元素是数组而不是单个标量值的列)的函数。(从3.2.3后端口)

  • 修正了PyFITS允许在头值和注释中使用换行符的问题。(从3.2.3后端口)

  • 固定酸洗 FITS_rec (表数据)对象。(从3.2.3后端口)

  • 通过删除对平台体系结构的不必要检查,改进了在OSX上编写大型压缩图像时的行为。(从3.2.3后端口)

  • 允许从没有 .closed 属性(因此甚至可能没有“开放”与“封闭”的概念)。(从3.2.3后端口)

  • 修正了标题评论卡值比较的小问题。(从3.2.3后端口)

3.2.2(2014-03-25)#

  • 修正了使用头通配符语法删除记录值关键字卡的回归。这是为了在v3.2.1发布之前修复的。

3.1.5(2014-03-25)#

  • 修正了使用头通配符语法删除记录值关键字卡的回归。这是为了在v3.1.4发布之前修复的。

3.2.1(2014-03-04)#

  • 对即将到来的Python3.4的名义支持。

  • 添加了缺少的功能 Header.insert() 方法:除了接受整数索引作为第一个参数外,它还支持提供关键字名称作为第一个参数,以便相对于特定关键字进行插入。它现在还支持一个可选的 after 争论。如果 after=True 插入是在插入点的下面而不是在它上面。(太空望远镜/PyFITS#12)

  • 固定支持广播分配给表列的值。(太空望远镜/PyFITS#48)

  • 一个抓包的小性能改进在头部。(太空望远镜/PyFITS#46)

  • 修复在实例化 ColDefs 输入无效的对象。

  • 修复了打开包含伪无符号整数的图像并使用 writeto 方法将删除将数据标识为无符号的比例因子。

  • 修正了用 checksum=True 未在新文件上添加校验和。(太空望远镜/PyFITS#8)

  • 修正了一个问题,即验证一个HDU的校验和会从HDU的头中完全删除校验和(即使它是有效的)

  • 修复了压缩图像上的校验和,因此 ZHECKSUMZDATASUM 包含原始图像HDU的校验和,而 CHECKSUMDATASUM 包含压缩图像HDU的校验和。这个特性本来应该在3.2中得到支持,但是支持有缺陷。

  • 修复了在将包含可变长度数组列的现有表写入新的FITS文件时,堆大小有时计算不正确的问题。这可能导致新的FITS文件损坏。(太空望远镜/PyFITS#47)

  • 修正了标题更新的问题 CompImageHDU 保存时未保留的对象。(太空望远镜/PyFITS#23)

  • 修复了布尔值为的错误 True 在标头中不能替换为整数1,对于 False 0,反之亦然。

  • 修正了一个类似于上面的问题,但是对于数值——现在用一个等价的数值替换一个标题值将使这个值上下转换。例如,将“0”替换为“0.0”会将“0.0”写入标头,以便将其作为浮点值返回。同样,一个浮点数可以向下转换为一个整数。(太空望远镜/PyFITS#49)

  • 一些python3兼容性修复,特别是与即将发布的python3.4的兼容性。

  • 修复了头文件包含无效的结束卡(例如“END=”)时不相关的崩溃。这导致了一个秘密的追踪。现在像这样的标题将检测到“明确意图”的结束卡,并产生关于其无效性的警告并修复它们。(217)

  • 允许的序列 Column 作为主参数传入的对象 FITS_rec.from_columns 如文件所示。

  • 修正了fitsdiff的显示格式问题,当两个浮点数相同时,如果两个浮点数的位数相同,则有时它不会显示它们之间的差异。(太空望远镜/PyFITS#21)

  • 修复了Python2有时允许将非ASCII字符串指定为头值(如果它们被指定为旧样式)的问题 str 对象与否 unicode 物体。(太空望远镜/PyFITS#37)

3.1.4(2014-03-04)#

  • 添加了缺少的功能 Header.insert() 方法:除了接受整数索引作为第一个参数外,它还支持提供关键字名称作为第一个参数,以便相对于特定关键字进行插入。它现在还支持一个可选的 after 争论。如果 after=True 插入是在插入点的下面而不是在它上面。(从3.2.1后端口)

  • 一个抓包的小性能改进在头部。(从3.2.1后端口)

  • 修复了打开包含伪无符号整数的图像并使用 writeto 方法将删除将数据标识为无符号的比例因子。(从3.2.1后端口)

  • 修正了用 checksum=True 未在新文件上添加校验和。(从3.2.1后端口)

  • 修正了一个问题,即验证一个HDU的校验和会从HDU的头中完全删除校验和(即使它是有效的)(从3.2.1后移植)

  • 修复了在将包含可变长度数组列的现有表写入新的FITS文件时,堆大小有时计算不正确的问题。这可能导致新的FITS文件损坏。(从3.2.1后端口)

  • 修复了布尔值为的错误 True 在标头中不能替换为整数1,对于 False 0,反之亦然。(从3.2.1后端口)

  • 修正了一个类似于上面的问题,但是对于数值——现在用一个等价的数值替换一个标题值将使这个值上下转换。例如,将“0”替换为“0.0”会将“0.0”写入标头,以便将其作为浮点值返回。同样,一个浮点数可以向下转换为一个整数。(从3.2.1后端口)

  • 修复了头文件包含无效的结束卡(例如“END=”)时不相关的崩溃。这导致了一个秘密的追踪。现在像这样的标题将检测到“明确意图”的结束卡,并产生关于其无效性的警告并修复它们。(从3.2.1后端口)

  • 修正了fitsdiff的显示格式问题,当两个浮点数相同时,如果两个浮点数的位数相同,则有时它不会显示它们之间的差异。(从3.2.1后端口)

  • 修复了Python2有时允许将非ASCII字符串指定为头值(如果它们被指定为旧样式)的问题 str 对象与否 unicode 物体。(从3.2.1后端口)

3.0.13(2014-03-04)#

  • 修正了用 checksum=True 未在新文件上添加校验和。(从3.2.1后端口)

  • 修正了一个问题,即验证一个HDU的校验和会从HDU的头中完全删除校验和(即使它是有效的)(从3.2.1后移植)

3.2(2013-11-26)#

集锦#

  • 重写基于CFITSIO的后端来处理FITS文件的tile压缩。它现在使用标准的CFITSIO,而不是像以前那样经过大量修改的CFITSIO片段。PyFITS自带CFITSIO v3.35的副本,该版本支持最新版本的平铺图像约定(v2.3),但系统包装商可能会选择将其去掉,转而支持系统安装的CFITSIO版本。早期的版本可能可以工作,但是3.28之前的版本还没有经过测试。(169)

  • 增加了对使用Q格式的列读写表的支持。Q格式与P格式(可变长度数组)相同,只是它使用64位整数作为数据描述符,允许单个表中的可变长度数组数据超过4gb。(160)

  • 添加了对包含伪无符号整数的表列的初始支持。当前通过使用 uint=True 打开文件时的选项;任何具有正确BZERO值的表列都将被解释为无符号整数数组并返回。

  • 对表和 FITS_rec 模块,以便更好地将FITS二进制和ASCII表数据结构的细节从封装它们的HDU数据结构中分离出来。这些变化中的大多数对用户来说不太明显(但请参见下面的API更改)。

API更改#

  • 分配给中的值 ColDefs.namesColDefs.formatsColDefs.nulls 以及其他属性 ColDefs 不再支持返回列属性列表的实例。分配给这些列表将不再更新相应的列。相反,请修改 Column 直接引用 (Column.nameColumn.null 等)

  • 这个 pyfits.new_table 函数被标记为“挂起的弃用”。这并不意味着它将被彻底删除或其功能已经改变。将来它很可能会被替换为具有类似功能(即使不是细微差别)的函数。一个更好的,如果不是稍微更详细的方法是使用 pyfits.FITS_rec.from_columns 创建新的 FITS_rec table——它的接口与 pyfits.new_table . 不同的是它返回一个计划 FITS_rec 阵列,而不是HDU实例。这个 FITS_rec 对象可以用作的构造函数中的数据参数 BinTableHDU (对于二进制表)或 TableHDU (对于ASCII表格)。这类似于创建 ImageHDU 通过传入图像数组。 pyfits.FITS_rec.from_columns 只是从FITS列规范创建FITS兼容重新阵列的一种简单方法。

  • 这个 updateHeaderupdateHeaderDataupdateCompressedData 方法 CompDataHDU 类正在挂起弃用并已移动到内部方法。这些方法的操作过于依赖内部状态,用户无法安全使用;相反,在读/写压缩图像hdu时,它们会在适当的位置自动调用。

  • 这个 CompDataHDU.compData 该属性正在被弃用,取而代之的是更清晰、更兼容PEP-8 CompDataHDU.compressed_data .

  • 的构造函数 CompDataHDU 已更改为接受新的关键字参数。新的关键字参数本质上是相同的,但采用下划线分隔格式,而不是camelCase格式。旧的论据仍有待驳斥。

  • HDU类的内部属性 _hdrLoc_datLoc_datSpan 已被替换为 _header_offset_data_offset_data_size 分别。旧的属性名仍有待弃用。这应该只对那些创建了自己的HDU子类的高级用户感兴趣。

  • 以下以前不推荐使用的函数和方法已被完全删除: createCardcreateCardFromStringupperKeyColDefs.datasetExtensionNameCaseSensitive_File.getfile_TableBaseHDU.get_coldefsHeader.has_keyHeader.ascardlist .

    如果您使用以前版本的PyFITS(>=3.0,<3.2)运行代码 python -Wd 参数,则将显示所有仍在使用的已弃用接口的警告。

  • 挂起弃用的接口现在已完全弃用。其中包括: create_cardcreate_card_from_stringupper_keyHeader.get_historyHeader.get_comment .

  • 这个 .name HDU上的属性现在直接绑定到HDU的头,因此如果 .header['EXTNAME'] 变化也是如此 .name 反之亦然。

  • 这个 pyfits.file.PYTHON_MODES 常量dict已重命名为 pyfits.file.PYFITS_MODES 更能体现其目的。但是,这很少被客户端代码使用。PyFITS 3.4将删除对旧名称的支持。

其他变更和增补#

  • 新的压缩代码还增加了对ZQUANTIZ和ZDITHER0关键字的支持,这些关键字是在最近的版本中添加的,这包括对GZIP的无损压缩的支持。(#198)默认情况下不使用抖动,但是 SUBTRACTIVE_DITHER_1SUBTRACTIVE_DITHER_2 方法可以通过将正确的常量传递给 quantize_method 论据 CompImageHDU 建造师。可以手动指定种子,也可以使用基于系统时钟或基于校验和的方法通过 dither_seed 争论。请参阅文档 CompImageHDU 更多细节。(198)(太空望远镜/望远镜32)

  • 通过支持Q格式,使用Tile压缩标准压缩的图像现在可以大于4gb。(159)

  • 所有HDU现在都有一个 .ver .level 属性,如果存在,则返回该HDU头中EXTVAL和EXTLEVEL关键字的值。添加此项是为了与 .name 属性,该属性从头返回EXTNAME值。

  • 然后 ColumnColDefs 班级有新的 .dtype 属性,在第一种情况下为列数据提供Numpy数据类型,在后一种情况下为每个表行提供完整的Numpy复合数据类型。

  • 在创建新表时,会将所有字符串列中的值默认为“0.0”。现在默认情况下,字符串列是用空字符串填充的——这似乎是一个不那么令人惊讶的默认值,但它可能会导致与使用旧版本的PyFITS创建的表的差异。

  • 改进了手动分配的列属性的往返和保存 (TNULLnTSCALn 等等)在表HDU标题中。(astropy/astropy#996年)

漏洞修补#

  • 包含压缩图像的二进制表可以选择性地包含与tile压缩约定无关的其他列。尽管这是一个不常见的用例,但标准允许这样做。(159)

  • 修改了一些文件I/O例程,以便在操作系统级文件模式(“rb”、“wb”、“ab”等)和PyFITS使用的“PyFITS特定”模式(如“只读”和“更新”)之间实现更简单、更一致的映射。也就是说,如果从一个打开的文件对象中读取一个FITS文件,那么不管它是以什么“模式”打开的,只要它具有正确的功能(读/写等),它也可以解决2.6+版本中Python io模块中有关文件模式的错误。(太空望远镜/PyFITS#33)

  • 修复了在没有实现的内存映射文件(即GNU Hurd)的系统上可能出现的一个模糊问题。(astropy/astropyා968)

3.1.3(2013-11-26)#

  • 不允许将NaN和Inf浮点值指定为头值,因为FITS标准没有定义在中表示它们的方法。因为这是未定义的,先前的行为没有意义,产生了无效的FITS文件。(太空望远镜/PyFITS#11)

  • 为64位OSX中的一个错误添加了解决方法,该错误在写入大于2^32字节的文件时可能会导致截断。(太空望远镜/PyFITS#28)

  • 修复了一个长期存在的问题,即写入二进制表时,不能正确地为可变长度数组列写入TFORMn关键字(它们忽略了格式的max array length参数)。这个问题在v3.1.2中被认为已经修复了,但是它只针对压缩图像hdu而不是一般的二进制表。

  • 修正了一个模糊的问题,这个问题可能发生在没有实现刷新到内存映射文件的系统上(即gnuhurd)。(从3.2后端口)

3.0.12(2013-11-26)#

  • 不允许将NaN和Inf浮点值指定为头值,因为FITS标准没有定义在中表示它们的方法。因为这是未定义的,先前的行为没有意义,产生了无效的FITS文件。(3.3后端口)

  • 为64位OSX中的一个错误添加了解决方法,该错误在写入大于2^32字节的文件时可能会导致截断。(3.3后端口)

  • 修复了一个长期存在的问题,即写入二进制表时,不能正确地为可变长度数组列写入TFORMn关键字(它们忽略了格式的max array length参数)。这个问题在v3.1.2中被认为已经修复了,但是它只针对压缩图像hdu而不是一般的二进制表。(3.3后端口)

  • 修正了一个模糊的问题,这个问题可能发生在没有实现刷新到内存映射文件的系统上(即gnuhurd)。(从3.2后端口)

3.1.3(未发布)#

  • 不允许将NaN和Inf浮点值指定为头值,因为FITS标准没有定义在中表示它们的方法。因为这是未定义的,先前的行为没有意义,产生了无效的FITS文件。(太空望远镜/PyFITS#11)

3.0.12(未发布)#

  • 不允许将NaN和Inf浮点值指定为头值,因为FITS标准没有定义在中表示它们的方法。因为这是未定义的,先前的行为没有意义,产生了无效的FITS文件。(3.3后端口)

  • 为64位OSX中的一个错误添加了解决方法,该错误在写入大于2^32字节的文件时可能会导致截断。(3.3后端口)

3.1.2(2013-04-22)#

  • 在fitsdiff中打开文件时发生错误时,异常消息现在至少会提到哪个文件出错了。(168)

  • 修复了在可写模式下按文件名打开gzip文件的支持(PyFITS支持写入gzip文件已有一段时间了,但只在gzip文件对象被传递给 pyfits.open() 因为一些遗留代码阻止了对gzip的完全支持。(195)

  • 在格式错误的FITS文件中添加了一条更有用的错误消息,该文件在ASCII表中包含非float NULL值,但头中缺少必需的TNULLn关键字。(197)

  • 修复了一个(显然是长期存在的)问题,即写入压缩图像时无法正确写入可变长度数组列的TFORMn关键字(它们忽略了格式的max array length参数)。(199)

  • 稍微重构了包含可变长度数组列的表的处理方式,增加了两个改进:修复了在调用 pyfits.getdata 便利函数导致了异常,并允许从FITS文件的现有mmap读取VLA数据。(200)

  • 修复了打开包含多维列的表(即通过TDIMn关键字)然后将其写入新文件时可能出现的错误。(201)

  • 添加了console_scripts入口点来安装fitsdiff和fitscheck脚本,如果没有其他东西,它可以提供更好的Windows支持。生成的脚本现在覆盖在scripts/目录中显式定义的脚本(刚开始只是一些微不足道的存根)。(202)

  • 修复了Python3上的一个错误,试图在Python3上打开一个不存在的文件会导致一个看起来不相关的回溯。(203)

  • 修复了fitsdiff中报告两个包含NaN作为值的头关键字不同的错误。(204)

  • 修正了测试中的一个问题,如果pyfits是以只读权限安装的,则会导致某些测试失败。(208)

  • 修正了实例化 BinTableHDU 从包含布尔字段的numpy数组将所有值转换为 False . (215)

  • 修正了将整数数组传递到 Column() 当列类型为float时,相同字节宽度的float会导致列数组变得混乱。(218)

  • 修正了在Python2中从字节字符串和Unicode字符串创建连续卡时的不一致行为——现在可以从Unicode字符串正确地创建CONTINUE卡(只要它们可以转换成ASCII码)。(太空望远镜/望远镜1)

  • 修正了在某些列中使用TDIMn创建新表可能导致崩溃的两个情况。(太空望远镜/PyFITS#3)

  • 修正了在解析第一个等号后(值之前)没有空格的层次结构关键字时的错误。(太空望远镜/PyFITS#5)

  • 防止层次结构关键字上额外的前导空格被视为关键字的一部分。(太空望远镜/PyFITS#6)

  • 修正了包含小写字母的层次结构关键字在头验证期间被错误地标记为无效的错误。(太空望远镜/PyFITS#7)

  • 修正了(太空望远镜/PyFITS#7)附带的问题,其中 Header.index() 方法无法正确处理包含小写字母的层次结构关键字。

3.0.11(2013-04-17)#

  • 修复了在可写模式下按文件名打开gzip文件的支持(PyFITS支持写入gzip文件已有一段时间了,但只在gzip文件对象被传递给 pyfits.open() 因为一些遗留代码阻止了对gzip的完全支持。从3.1.2后端口。(195)

  • 在格式错误的FITS文件中添加了一条更有用的错误消息,该文件在ASCII表中包含非float NULL值,但头中缺少必需的TNULLn关键字。从3.1.2后端口。(197)

  • 修复了一个(显然是长期存在的)问题,即写入压缩图像时无法正确写入可变长度数组列的TFORMn关键字(它们忽略了格式的max array length参数)。从3.1.2后端口。(199)

  • 稍微重构了包含可变长度数组列的表的处理方式,增加了两个改进:修复了在调用 pyfits.getdata 便利函数导致了异常,并允许从FITS文件的现有mmap读取VLA数据。从3.1.2后端口。(200)

  • 修复了打开包含多维列的表(即通过TDIMn关键字)然后将其写入新文件时可能出现的错误。从3.1.2后端口。(201)

  • 修复了Python3上的一个错误,试图在Python3上打开一个不存在的文件会导致一个看起来不相关的回溯。从3.1.2后端口。(203)

  • 修复了fitsdiff中报告两个包含NaN作为值的头关键字不同的错误。从3.1.2后端口。(204)

  • 修正了测试中的一个问题,如果pyfits是以只读权限安装的,则会导致某些测试失败。从3.1.2后端口。(208)

  • 修正了实例化 BinTableHDU 从包含布尔字段的numpy数组将所有值转换为 False . 从3.1.2后端口。(215)

  • 修正了将整数数组传递到 Column() 当列类型为float时,相同字节宽度的float会导致列数组变得混乱。从3.1.2后端口。(218)

  • 修正了在某些列中使用TDIMn创建新表可能导致崩溃的两个情况。从3.1.2后端口。(太空望远镜/PyFITS#3)

3.1.1(2013-01-02)#

这是3.1.x系列的bug修复版本。

漏洞修补#

  • 改进了压缩图像hdu中缩放图像和伪无符号整数图像的处理。现在,它们的工作方式更像普通图像hdu,支持 do_not_scale_image_datauint 选项,以及 scale_backsave_backup . 这个 .scale() 方法效果也更好。(88)

  • 允许EXTNAME关键字在读取文件时使用非字符串值,而不是由于格式错误而引发异常。写入时添加了EXTNAME关键字格式的验证。(96)

  • 增加了对主hdu中EXTNAME和EXTVER的支持。也就是说,如果在头中指定EXTNAME,它也将反映在 .name 属性和in pyfits.info() . 这些关键字过去在主hdu中是不能使用的,但是最新版本的FITS标准允许使用它们。(151)

  • HCOMPRESS可以再次用于压缩数据立方体(和更高维数组),只要tile大小有效地是二维的。实际上,PyFITS会自动使用兼容的磁贴大小,即使它们没有被明确指定。(171)

  • 增加了对可选 endcard 中的参数 Header.fromtextfile()Header.totextfile() 方法。尽管 endcard=False 这是一个合理的默认假设,仍然存在包含结束卡的FITS标题的文本转储,因此这应该更灵活。(176)

  • 修正了在两个空表(即零行)上运行fitsdiff时的崩溃。(178)

  • 修正了一个问题,即在更新模式下打开包含随机组hdu的文件可能导致不必要的文件重写,即使没有修改任何数据。(179)

  • 修正了在某些情况下,如果PyFITS与Numpy 1.7一起使用,可能会导致OSX文件系统死锁的错误。(180)

  • 修复了使用 ignore_comments 选项。(181)

  • 修复了FITS WCS失真纸记录值关键字卡的一些错误:

    • 那些看起来有点像RVKC但并不打算被视为RVKC的卡片被过分放任——评论和历史等评论关键词尤其受到影响。(183)

    • 只通过标准FITS关键字在标题中查找卡片时,应始终返回该卡片的原始值。这样,包含发生在有效rvkc上的值的卡片仍然被视为普通卡片。(184)

    • 在只有部分字段说明符(例如“DP1.AXIS”而不是“DP1.AXIS.1”)的头中查找RVKC被隐式处理为通配符查找。(184)

  • 修正了在区分两个FITS文件(其中至少一个文件包含压缩图像HDU)时发生的崩溃,该文件未被识别为图像而不是表。(187)

  • 修复了 CardList.indexCardList.count 方法。(190)

  • 改进 __repr__ 和文本文件表示卡的长值,将其拆分为连续卡。(193)

  • 修复了尝试为空白('')关键字分配长(>72个字符)值时的崩溃。这也改变了空白关键字的表示方式——在开始任何评论内容之前,还有整整8个空格;这 may 影响标题卡的确切显示,假设在内容开始之前空白关键字卡中的空格可能较少。然而,目前的方法更符合FITS标准的要求。(194)

3.0.10(2013-01-02)#

  • 改进了压缩图像hdu中缩放图像和伪无符号整数图像的处理。现在,它们的工作方式更像普通图像hdu,支持 do_not_scale_image_datauint 选项,以及 scale_backsave_backup . 这个 .scale() 方法效果也更好。从3.1.1后端口。(88)

  • 允许EXTNAME关键字在读取文件时使用非字符串值,而不是由于格式错误而引发异常。写入时添加了EXTNAME关键字格式的验证。从3.1.1后端口。(96)

  • 增加了对主hdu中EXTNAME和EXTVER的支持。也就是说,如果在头中指定EXTNAME,它也将反映在 .name 属性和in pyfits.info() . 这些关键字过去在主hdu中是冗长的,但最新版本的FITS标准允许使用它们。从3.1.1后端口。(151)

  • HCOMPRESS可以再次用于压缩数据立方体(和更高维数组),只要tile大小有效地是二维的。实际上,PyFITS不会自动使用兼容的磁贴大小,即使它们没有被明确指定。从3.1.1后端口。(171)

  • 修复了在写出包含零宽度表列的文件时的一个错误,其中TFIELDS关键字将不正确地更新,使表基本上无法读取。从3.1.0向后移植。(174)

  • 修正了一个问题,即在更新模式下打开包含随机组hdu的文件可能导致不必要的文件重写,即使没有修改任何数据。从3.1.1后端口。(179)

  • 修正了在某些情况下,如果PyFITS与Numpy 1.7一起使用,可能会导致OSX文件系统死锁的错误。从3.1.1后端口。(180)

3.1(2012-08-08)#

集锦#

  • 这个 Header 对象已被显著地重新加工,并且 CardList 对象现在不推荐使用(它们的功能折叠到 Header 类)。有关更多详细信息,请参阅下面的API更改。

  • 现在默认使用HDU访问数据。有关更多详细信息,请参阅下面的API更改。

  • 现在包括新版本的 fitsdiff 用于比较两个FITS文件的程序,以及由使用的新FITS比较API fitsdiff . 请参阅下面的新功能。

API更改#

  • 这个 Header 类已重写,并且 CardList 类已弃用。使用FITS头的大多数基本细节都没有改变,大多数用户不会注意到。但是在高级用户和应用程序开发人员感兴趣的一些领域中存在差异。有关更改的详细信息,请参阅PyFITS文档中的“Header Interface Transition Guide”部分。有关更多详细信息和背景信息,请参阅PyFITS-Trac上的票证#64。以下是一些亮点:

    • Header类现在完全实现了Python dict接口,并且可以与dict互换使用,其中的键是头关键字。

    • 可以使用普通关键字分配将新关键字添加到标头(以前需要使用 Header.update 添加新关键字)。例如::

      >>> header['NAXIS'] = 2
      

      将更新现有的'FOO'关键字(如果它已经存在),或者添加一个新的关键字(如果它不存在),就像dict一样。

    • 可以使用元组同时指定值和注释:

      >>> header['NAXIS'] = (2, 'Number of axes')
      
    • 要添加/更新新卡并确保已将其添加到特定位置,请使用 Header.set() ::

      >>> header.set('NAXIS', 2, 'Number of axes', after='BITPIX')
      

      这和以前一样 Header.update() . Header.update() 仍然以旧方式工作,但已被弃用。

    • 虽然 Card objects still exist, it generally is not necessary to work with them directly. Header.ascardlist()/Header.ascard 已弃用,不应使用。直接访问 Card 标题中的对象,使用 Header.cards .

    • 要访问卡片注释,仍然可以通过卡片本身或 Header.comments . 例如::

      >>> header.cards['NAXIS'].comment
      Number of axes
      >>> header.comments['NAXIS']
      Number of axes
      
    • Card 对象现在可以与互换使用 (keyword, value, comment) 三元组。他们还有 .value.comment 属性也是。这个 .key 属性已重命名为 .keyword 不过,为了保持一致性 .key 仍然支持(但已弃用)。

  • 内存映射现在默认用于访问HDU数据。也就是说, pyfits.open() 使用 memmap=True 作为默认值。这在大多数用例中提供了更好的性能——只有一些I/O密集型应用程序可能不需要这样做。默认情况下启用mmap还可以在PyFITS处理内存映射数据时查找和修复大量的bug(这些bug修复大多是后移植到PyFITS 3.0.5中的)。(85)

    • 一个新的 pyfits.USE_MEMMAP 已添加全局变量。设置 pyfits.USE_MEMMAP = False 更改打开文件的默认memmap设置。这对于控制pyfits深入嵌入的应用程序中的行为特别有用。

    • 同样,一个新的 PYFITS_USE_MEMMAP 支持环境变量。设置 PYFITS_USE_MEMMAP = 0 在您的环境中更改默认行为。

  • 这个 size() HDU对象上的方法现在是 .size 属性——返回HDU数据部分的大小(以字节为单位),在大多数情况下相当于 hdu.data.nbytes (83)

  • BinTableHDU.tdumpBinTableHDU.tcreate 已弃用--使用 BinTableHDU.dumpBinTableHDU.load 相反。新方法以与以前版本稍有不同的格式输出表数据,在每个值周围加上引号。此格式与以前版本的PyFITS中的数据转储兼容,但由于旧版本中存在解析错误,因此与之不兼容。

  • 同样地 pyfits.tdumppyfits.tcreate 这些方法的便利函数版本已被重命名 pyfits.tabledumppyfits.tableload . 旧的已弃用,但为了向后兼容而当前保留。(r1125)

  • 一个新的全局变量 pyfits.EXTENSION_NAME_CASE_SENSITIVE 已添加。这可以替代 pyfits.setExtensionNameCaseSensitive 它没有被弃用,在将来的版本中可能会被删除。启用扩展名区分大小写(即将“sci”视为与“sci”不同)设置 pyfits.EXTENSION_NAME_CASE_SENSITIVE = True . 默认值为 False . (r1139)

  • 一个新的全局配置变量 pyfits.STRIP_HEADER_WHITESPACE 已添加。默认情况下,如果头中的字符串值包含尾随空格,则在读取该值时自动删除该空白。如果你准备好了 pyfits.STRIP_HEADER_WHITESPACE = False 保留所有空白。(146)

  • 老年人 classExtensions 扩展机制(在PyFITS 3.0中已被弃用)被彻底删除。据我们所知,它已不再在任何地方使用。(r1309)

  • 通过pythonwarningsapi发出的PyFITS的警告消息现在被输出到stderr,而不是stdout,这是默认情况。PyFITS不再修改warnings模块输出到哪个流的默认行为。(r1319)

  • 这个 checksum 参数 pyfits.open() 现在接受“remove”值,这将导致忽略任何现有的校验和/数据集关键字,并在保存文件时删除这些关键字。

新特点#

  • 增加了对提议的“FITS”扩展HDU类型的支持。FITS hdu包含一个完整的FITS文件,嵌入到它们的数据部分中。 FitsHDU 对象的工作方式与PyFITS中的其他HDU类型类似。他们的 .data 属性返回原始数据数组。但是,他们有一个特别的 .hdulist 属性,该属性将数据作为FITS文件处理并将其作为内存中的HDUList对象返回。FitsHDU对象还支持 FitsHDU.fromhdulist() 返回一个新的 FitsHDU 对象,该对象嵌入提供的HDUList。(80)

  • 增加了一个新的 .is_image 属性,如果HDU数据是一个“图像”,而不是表或其他内容,则此属性为真。这里“image”的含义相当松散,主要是指主HDU或图像扩展HDU,或者可能是压缩图像HDU(#71)

  • 增加了一个 HDUList.fromstring 类方法,它可以解析内存中已有的FITS文件并实例化 HDUList 反对。这对于将PyFITS与其他处理FITS文件的库(如CFITSIO)集成可能很有用。它在流媒体应用程序中也很有用。这个名称有点用词不当,因为它实际上接受任何实现缓冲区接口的Python对象,其中包括 bytesbytearraymemoryviewnumpy.ndarray 等(90)

  • 增加了一个新的 pyfits.diff 包含比较FITS文件的工具的模块。我们可以使用 pyfits.diff.FITSDiff 类比较两个FITS文件的完整性。还有一个 pyfits.diff.HeaderDiff 类来比较两个FITS头和其他类似接口。有关此接口的详细信息,请参阅PyFITS文档。这个 pyfits.diff 模块为新的 fitsdiff 用PyFITS安装的程序。安装PyFITS后,运行 fitsdiff --help 有关用法的详细信息。

  • pyfits.open() 现在接受 scale_back 争论。如果设置为 True ,这将使用文件首次打开时的原始BZERO和BSCALE参数以及原始BITPIX自动缩放数据。例如,如果原来的BITPIX是16,这将相当于调用 hdu.scale('int16', 'old') 就在打电话之前 flush()close() 在档案上。此选项适用于文件中的所有HDU。(120)

  • pyfits.open() 现在接受 save_backup 争论。如果设置为 True ,这会在刷新对原始文件所做的任何更改之前自动保存原始文件的备份(这当然只适用于更新和追加模式)。这在处理缩放图像数据时尤其有用。(121)

行为改变#

  • 默认情况下,PyFITS发出的警告不会输出到stderr,而不是像过去一样输出到stdout。这与大多数用户的期望背道而驰,这使得他们很难将PyFITS的输出与脚本的期望输出分开。(r1319)

漏洞修补#

  • 固定的 pyfits.tcreate() (现在) pyfits.tableload() )在列定义文件中遇到空行时更健壮(#14)

  • 修正了在使用Numpy 1.4或更低版本(尽管1.4是PyFITS支持的最旧版本)时处理CONTINUE卡时可能发生的相当罕见的崩溃。(r1330)

  • 固定的 _BaseHDU.fromstring 从包含HDU头和数据的字符串/缓冲区实际正确实例化HDU对象。这使得 HDUList.fromstring 如上所述。(90)

  • 修复了一个罕见的角落情况,在某些用例中,标头中格式错误的浮点值没有作为float正确返回。(137)

  • 修正了前一个错误的推论,即在保存对文件的更改时,小数点前有前导零的浮点值不必要地删除了前导零(例如,“0.001”将被写回“.001”,即使没有对文件进行任何更改)。(137)

  • 在更新模式下打开包含校验和和/或DATASUM关键字的文件时,即使文件以CHECKSUM=False打开,也会更新和保留校验和/或DATASUM。这种行为上的改变可以防止校验和被意外删除。(148)

  • 修正了一个错误 ImageHDU.scale(option='old') 根本不起作用——它没有将图像恢复到原来的BSCALE和BZERO值。(162)

  • 修复了在写出包含零宽度表列的文件时的一个错误,其中TFIELDS关键字将不正确地更新,使表基本上无法读取。此修复程序将后移植到3.0.10版的3.0.x系列。(174)

3.0.9(2012-08-06)#

这是3.0.x系列的bug修复版本。

漏洞修补#

  • 固定的 Header.values()/Header.itervalues()Header.items() / Header.iteritems() 正确返回重复关键字(特别是历史和注释等注释关键字)的不同值。这使得旧的头实现与PyFITS 3.1中的新实现稍微兼容一些。(127)

    备注

    此修复程序没有更改早期PyFITS版本的现有行为,其中 Header.keys() 返回头中删除重复项的所有关键字。PyFITS 3.1改变了这种行为,因此 Header.keys() 包括重复项。

  • 修正了一个错误 ImageHDU.scale(option='old') 根本不起作用——它没有将图像恢复到原来的BSCALE和BZERO值。(162)

  • 修正了一个错误,在“更新”模式下打开包含压缩图像hdu的文件,然后立即关闭而不做任何更改,导致文件被不必要地重写。(167)

  • 修正了写入压缩图像数据时,或者在某些情况下在“更新”模式下打开包含压缩图像hdu的文件时可能发生的两个内存泄漏。(168)

3.0.8(2012-06-04)#

行为改变#

  • 在此版本之前,图像数据部分不处理缩放数据——也就是说,具有非平凡的BSCALE和/或b0值的图像。以前,为了分段读取这些图像,有必要手动对每个分区应用BSCALE+BZERO。值得注意的是 did 支持伪无符号整数(flakily)。此更改只是扩展了对一般BSCALE+BZERO值的支持。

漏洞修补#

  • 修复了阻止保存对布尔表列中值的更新的错误。结果发现,这是一个更深层次问题的征兆,它可能会阻止其他表更新也被保存。(139)

  • 修正了以字符串“END”结尾的关键字注释在某些情况下可能导致头(以及该点之后的文件的其余部分)被误读的情况。(142)

  • 修复了在图像数据段中对缩放图像数据和伪无符号整数的支持 (hdu.section ). 以前这是完全不支持的。在某种程度上,支持被认为是增加了,但它是有缺陷的和不完整的。现在这个功能似乎运行得更好了。(143)

  • 修复了文档以指出图像数据部分 do 支持非连续切片(并且有很长一段时间)。文档从未更新以反映这一点,并且向用户错误地告知只支持连续切片,这导致了一些混乱。(144)

  • 修复了在 HDUList 包含多个主hdu的对象在写入文件之前验证对象时导致无限递归。(145)

  • 修复了一个罕见但严重的情况,即将更新保存到以前具有校验和和和/或DATASUM关键字,但在保存时删除了校验和的文件,可能会导致文件轻微损坏和无法读取。(147)

  • 修正了读取“非标准”FITS文件时出现的问题,这些文件的主要头文件包含SIMPLE=F。PyFITS从未对如何处理此类文件做出过多的保证。但至少应该可以读取它们的头,如果可能的话还可以读取数据。保存对此类文件的更改时,不应尝试预先添加不需要的有效主HDU。(157)

  • 修复了一个错误,其中打开图像 disable_image_compression = True 导致对所有后续操作禁用压缩 pyfits.open() 电话。(r1651)

3.0.7(2012-04-10)#

行为改变#

  • GroupData对象的片段现在返回新的GroupData对象,而不是扩展的多行u Group对象。这类似于PyFITS 3.0 fixed FITS_rec slicing,并且应该同时为GroupData修复。旧的行为导致了一些bug,其中Numpy内部的函数期望切片一个ndarray将返回一个新的ndarray。由于这是一个具有罕见特性的罕见用例,大多数用户不太可能受到此更改的影响。

  • 以前用于表示GroupData对象中单个组记录的内部_Group对象被重命名为Group,现在是一个公共接口。然而,几乎没有理由直接创建组对象,因此不应将其视为“新特性”。

  • PyFITS 3.0.6中的一个麻烦被修复了,如果实际上没有任何扩展hdu,EXTEND关键字的值总是被设置为F。没有必要修改此值。

漏洞修补#

  • 修复了GroupData对象在切片时返回新的GroupData对象而不是_grouprecord对象。有关更多详细信息,请参阅上面的“行为变化”。

  • 修复了组对象的切片——以前根本不可能对它们进行切片。

  • 使分配成为可能 np.bool_ 对象作为标题值。(123)

  • 修正了对EXTEND关键字过于严格的处理;请参阅上面的“行为更改”。(124)

  • 修正了许多情况下,HDU的头将被PyFITS标记为“modified”并被重写,即使不需要对头进行任何更改。(125)

  • 修正了一个错误,当保存文件时,随机组HDU中的PTYPEn关键字的值都被强制为小写。(130)

  • 在中删除了不必要的内联导入 ExtensionHDU.__setattr__ 在打开包含大量扩展名的文件时,这会导致一些速度减慢,另外,由于Julian Taylor的帮助,还出现了一些其他小的(但并非无关紧要)性能改进。(133)

  • 修正了PyFITS无法解析包含无效标头结尾填充(即空字节而不是空格)的标头块的回归。这样的头可以再次解析,但会发出警告,因为这样的头不是有效的匹配。(136)

  • 修复了随机组hdu中的表数据没有被垃圾收集的内存泄漏。(138)

3.0.6(2012-02-29)#

集锦#

此版本的主要原因是修复PyFITS 3.0.5中引入的一个问题,该问题仅在“更新”模式下打开一个包含缩放数据的文件(即,具有非平凡的BSCALE和BZERO关键字)会导致数据在文件关闭时自动重标(可能会将数据从int转换为float)应用程序没有接触数据。现在PyFITS只会在应用程序实际访问数据时重新缩放扩展中的数据。因此,在“更新”模式下打开文件以修改头或附加新扩展名不会对现有扩展名中的数据造成任何更改。

此版本还修复了一些通过更广泛的Windows测试发现的特定于Windows的bug,以及其他的bug。

漏洞修补#

  • 打开包含无效头卡的文件时会出现更准确的错误消息。(109)

  • 修复了一个可能的引用周期/内存泄漏,这是通过在Windows上进行更广泛的测试而发现的。(112)

  • 修复了“ostream”模式以“wb”模式而不是“w”模式打开基础文件。(112)

  • 修复了一个仅限Windows的问题,即尝试将更新保存到已调整大小的FITS文件可能导致由于该文件上存在打开的MMAP而导致崩溃的问题。(112)

  • 修复了尝试从包含bool字段的Numpy数组创建FITS表(即使用new_table())时发生的崩溃。(113)

  • 修复了手动初始化 HDUList 使用HDU列表无法在主HDU上设置正确的EXTEND关键字值。(114)

  • 修正了在Python<2.7中尝试深度复制标头时可能发生的崩溃。(115)

  • 修正了一个问题,即仅仅在“更新”模式下打开缩放图像会导致文件关闭时将数据转换为浮动。(119)

3.0.5(2012-01-30)#

  • 修复了访问以memmap=True打开的文件的图像部分时可能发生的崩溃。(r1211)

  • 修正了memmap=True与memmap=False时在“readonly”模式下打开的文件行为的不一致性。在后一种情况下,虽然对阵列数据的更改没有保存到磁盘上,但是可以更新内存中的阵列数据。另一方面,在memmap=True时,“readonly”模式甚至阻止在内存中修改数据。这就是“copyonwrite”模式的作用,但行为上的差异令人困惑。现在使用memmap时,“readonly”等同于“copyonwrite”。如果旧的拒绝更改数组数据的行为是必要的,可以使用新的“denywrite”模式,尽管它只适用于使用memmap打开的文件。(r1275)

  • 修正了以memmap=True打开的文件将返回原始图像数据的问题numpy.memmap对象,这可能会导致一些意外的行为——相反,memmap对象被视为努比·恩达雷. (1285兰特)

  • 修正了Python3中的一个问题,即Python3上的Numpy中的一个bug的解决方法与其他一些软件交互不良,即vo.表格包(可能还有其他)。(r1320、r1337和#110)

  • 修正了在刷新FITS文件时处理sigint的错误行为(即Ctrl-C键盘中断)。PyFITS已经防止SIGINTs导致不完全的刷新,但是之后没有正确地清理信号处理程序,或者在刷新完成后重新读取键盘中断。(r1321)

  • 修正了在Python3中打开启用校验和检查的文件时可能发生的崩溃。(r1336)

  • 修复了一个可能导致 StreamingHDU 使用低于1.5版本的Numpy时的接口。

  • 修复了在创建新的 CompImageHDU 从一系列的大端数据。(104)

  • 修正了打开结尾有额外零填充的文件时的崩溃。虽然FITS文件不应该有这样的填充,但格式也没有明确禁止它,PyFITS不应该绊倒它。(106)

  • 修复了在打开包含大列字符串值的表时出现的一个严重的减速。(111)

3.0.4(2011-11-22)#

  • 修正了编写HCOMPRESS压缩图像时可能在Python2.5和2.6上发生的崩溃。(r1217)

  • 修复了在memmap=True的“readonly”模式下打开的文件中切片表时的崩溃。(r1230)

  • 将更改写入文件或写入新文件会在默认情况下以“fix”模式而不是“exception”验证输出,也就是说,PyFITS将自动修复常见FITS格式错误,而不是引发异常。(r1243)

  • 修复了一个错误,当只指定'PRIMARY'作为要使用的扩展时,getval()和getheader()等便利函数崩溃。

  • 修复了一个错误,该错误阻止将关键字参数(超出标准数据和头参数)作为位置参数传递给扩展HDU类的构造函数。

  • 修复了一些在Windows上失败的测试——在这种情况下,测试本身无法关闭一些临时文件,并且Windows拒绝删除这些文件,而这些文件上仍有打开的句柄。(r1295)

  • 修正了Python2.5forwindows(可能还有其他平台)的头值中浮点格式的问题。指数被零填充为3位数;尽管FITS标准对此没有规定,但格式现在被规范化,始终将指数填充为两位数。(r1295)

  • 修正了一个长注释卡(如历史和评论)被分成多个连续卡片的错误。然而,在续读卡中不可能找到评论卡。相反,这些长卡片被分成多张评论卡片。(97)

  • 无论文件扩展名如何,GZIP/ZIP压缩的FITS文件都可以被检测并打开。(99)

  • 修正了一个严重的错误,在“更新”模式下打开缩放图像,然后在不接触数据的情况下关闭文件会导致文件损坏。(101)

3.0.3(2011-10-05)#

  • 修正了一些小错误,涉及到记录值关键字卡(#70)

  • 在某些情况下,如果头中的第一个关键字值不是字符串值(#89),则HDU创建失败

  • 修复了当数据数组包含奇数个字节时尝试计算HDU校验和时的崩溃(#91)

  • 禁用打开压缩HDU时显示的不必要的警告,禁用#image_compression=True(#92)

  • 修正了处理HCOMPRESS压缩图像的代码中的错误。

3.0.2(2011-09-23)#

  • 这个 BinTableHDU.tcreate 方法并通过扩展 pyfits.tcreate 函数不再被空行绊倒(#14)

  • 读/写FITS文件时,将验证主hdu中EXTEND关键字的存在、值和位置(#32)

  • 改进的文档(在警告消息和手册中)表明PyFITS使用基于零的索引(正如人们对C/Python代码的预期,但与用FORTRAN编写的PyFITS标准相反)(#68)

  • 修正了一个错误,更新标题卡片注释可能导致值丢失,如果它还没有从卡片图像字符串中读取。

  • 修正了一个相关的错误,其中直接对标题中的卡片对象进行了更改(例如,直接将卡片价值或者卡片.注释)将更改刷新到文件时不会传播(#69) [注意:这个错误和上面的错误最初被报告为在版本3.0.1中被修复,但是这个修复从未包含在版本中。]

  • 改进了文件处理,特别是在python3中,它有一些与文件I/O相关的小错误(#76)

  • 修复了更新FITS文件有时会导致其失去原始文件权限的错误(#79)

  • 修正了TDIMn关键字的处理;3.0增加了对它们的支持,但轴的顺序向后(它们被当作row major处理)(#82)

  • 修复了在打开包含缩放数据的FITS文件并立即写入新文件而不首先显式查看数据时的崩溃(#84)

  • 修复了一个错误,其中创建一个列名为“name”或“formats”的表会导致无限递归(#86)

3.0.1(2011-09-12)#

  • 修正了一个错误,更新标题卡片注释可能导致值丢失,如果它还没有从卡片图像字符串中读取。

  • 改变 _TableBaseHDU.data 如果数据包含空表a FITS_rec 返回零行的对象,而不是 None .

  • 这个 .key 属性 RecordValuedKeywordCards 现在返回完整的关键字+字段说明符值,而不仅仅是普通关键字(#46)

  • 修正了一个相关的错误,其中直接对标题中的卡片对象进行了更改(例如,直接将卡片价值或者卡片.注释)将更改刷新到文件时不会传播(#69)

  • 修复了在某些情况下编写零行表可能失败的错误(#72)

  • 导致一些测试失败的各种小错误修复,特别是在Python3上(#74,#75)

  • 修复了一个错误,即从非本机字节顺序的数组创建表列时,不会保留字节顺序,从而使用错误的字节顺序解释列数组(#77)

3.0.0(2011-08-23)#

  • 包含主要更改,将版本升级到3.0

  • 大量的代码重构和重组;试图保持公共API与旧版本的向后兼容性(私有API有很多变化,不能保证向后兼容)。有一些小的公共API更改需要注意:

    • 这个pyfits.rec公司模块已完全移除。如果你版本的numpy没有numpy.core.records公司模块太旧了,不适合用它。

    • 这个 Header.ascardlist() 方法已弃用--请使用 .ascard 改为属性。

    • Card 实例有一个新的 .cardimage 应该使用而不是 .ascardimage() ,可能会被弃用。

    • 这个 Card.fromstring() 方法现在是类方法。它返回一个新的 Card 实例,而不是修改现有实例。

    • 这个 req_cards() HDU实例上的方法已更改: pos 参数不再是字符串。它可以是整数值(意味着卡的位置必须与该值匹配),也可以是一个函数,该函数将卡的位置作为参数,如果位置有效,则返回True。同样地 test 参数不再接受字符串,而是接受一个验证卡的值并返回True或False的函数。

    • 这个 get_coldefs() 表HDUs的方法已弃用。使用 .columns 改为属性。

    • 这个 ColDefs.data 属性已弃用--使用 ColDefs.columns 取而代之的是(尽管一般情况下你不应该直接处理它——它可能在某个时候变成内部的)。

    • FITS_record 物体 startend 而不是作为参数 startColumnendColumn (这些很少是手动创建的,因此这种更改不太可能影响任何人)。

    • BinTableHDU.tcreate() 现在是一个classmethod,并返回一个新的 BinTableHDU 实例。

    • 使用 ExtensionHDUNonstandardExtHDU 用于生成新的扩展HDU类。它们现在是公共接口,以前它们是私有的,前缀是下划线。

    • 可能是其他人——如果发现任何导致困难的变化,请报告。

  • 对已弃用函数的调用将显示弃用警告。但是,在Python2.7中,默认情况下会忽略不推荐警告,所以使用 -Wd 选项查看是否正在使用任何不推荐使用的函数。如果我们接近实际删除任何函数,我们可能会在默认情况下显示弃用警告。

  • 添加了基本的python3支持

  • 增加了对表中由TDIMn关键字指定的多维列的支持(#47)

  • 修复了在使用 new_table() 函数(#49)用零字节填充)与ASCII表(字符串用空格填充)(#15)

  • 修复了写入(#41)时未保留随机访问组参数名称的情况的错误

  • 增加了对宽度为零的二进制表字段的支持(#42)

  • 增加了对ASCII表中更广泛整数类型的支持;尽管这是非标准的,但一些GEIS映像需要它(#45)

  • 修复了在从头创建HDUList对象时导致HDULists的index_of()方法崩溃的错误(#48)

  • 修正了二进制表中字符串填充的行为(字符串应该用空值而不是空格填充)

  • 修正了使用非标准块大小计算校验和时导致内存过度使用的罕见问题(参见r818)

  • 在图像部分添加对强制uint数据的支持(#53)

  • 修正了在创建比原始表多行的新表时未扩展可变长度数组列的问题(#54)

  • 修复了FITS_rec对象的元组和基于列表的索引(#55)

  • 修正了BZERO和BSCALE关键字被附加到错误位置的标头(#56)的问题

  • FITS_record 对象(表行)具有完全的切片支持,包括单步执行等(#59)

  • 修复了同时更新多个文件(例如运行并行进程时)可能导致mktemp()出现争用条件的错误(#61)

  • 修正了一个错误,其中压缩的图像标题不是funpack实用程序所期望的顺序(#62)

2.4.0(2011-01-10)#

添加了以下增强功能:

  • 校验和支持现在正确地符合FITS标准。pyfits支持读写旧校验和和和新的标准校验和。这个 fitscheck 提供命令行实用程序来验证和更新校验和。

  • 添加了一个新的可选关键字参数 do_not_scale_image_datapyfits.open 方便功能。如果将此参数设置为True,并且读取包含缩放数据的ImageHDU,则数据在读取时不会自动缩放。当您只想更新某些头数据时,可以在打开fits文件进行更新时使用此选项。如果不使用此参数,如果头更新需要更改fits文件的大小,则在写入更新的信息时,将以其缩放格式(通常使用不同的数据类型)而不是非缩放格式读取、缩放和写回数据。

  • 添加了一个新的可选关键字参数 disable_image_compressionpyfits.open 功能。什么时候? True ,任何压缩的图像HDU都会像二进制表HDU一样被读入。

  • 增加了一个 verify 关键字参数 pyfits.append 功能。什么时候? Falseappend 将假定现有的FITS文件已经有效,并简单地将新内容附加到文件的末尾,从而导致向大文件追加数据的速度大大加快。

  • 添加HDU方法 update_ext_nameupdate_ext_version 用于更新HDU的名称和版本。

  • 增加HDU方法 filebytes 计算将写入与HDU相关联的文件的字节数。

  • 增强了section类以允许读取非连续图像数据。以前,section类只能用于读取连续的数据。(CNSHD781626)

  • 添加的方法 HDUList.fileinfo() 它返回一个字典,其中包含与HDU关联的文件中头和数据的位置信息。

修复了以下错误:

  • 读取某些格式错误的FITS头会导致 NameError 异常,而不是有关错误原因的信息。

  • pyfits现在可以处理不合规的问题 CONTINUE javafits制作的卡片。

  • BinTableTSCALn 现在字节交换正确。

  • 确保浮点卡值不超过20个字符。

  • 更新的 flush 因此,当在更新模式下打开的文件的HDU中的数据发生变化时,在写出HDU之前,报头将被更新以匹配更改的数据。

  • 允许 HIERARCH 包含关键字和值的卡片,其字符总长度为69个字符。以前的长度限制在68个字符。

  • 呼叫 FITS_rec['columnName'] 现在返回一个 ndarray . 和打电话给 FITS_rec.field('columnName')FITS_rec.columnName . 以前, FITS_rec['columnName'] 返回了一个不太有用的 fits_record 对象。(CNSHD789053)

  • 修正了 append 方便功能,以消除从附加到的文件中读取HDU数据。(CNSHD794738)

  • 消除了pyfitscop模块与cfitsio和zlib库之间的通用符号。这可能会导致同时使用PyFITS和cfitsio或zlib的系统出现问题。(CNSHD795046)

2.3.1(2010-06-03)#

修复了以下错误:

  • 将GNU通用公共许可证下的压缩映像HDU扩展中的代码替换为BSD许可证下的代码。此更改允许在BSD许可证下分发pyfits。

2.3(2010-05-11)#

进行了以下改进:

  • 完全消除对numarray的支持。

  • 修改pyfits文档以使用Sphinx。

  • 支持Python2.6和未来的部门。

  • 添加了一个新方法,以获取与HDUList对象关联的文件名。方法HDUList.filename()返回关联文件的名称。如果没有与HDUList关联的文件,则返回无。

  • 打开fits文件时支持python2.5的'with'语句。(CNSHD766308)现在可以使用以下构造:

    >>> from __future__ import with_statement import pyfits
    >>> with pyfits.open("input.fits") as hdul:
    ...    #process hdul
    >>>
    
  • 扩展了对从ImageHDU读取无符号整数16值的支持,以包括无符号整数32和无符号整数64值。当数据类型为有符号整数16且BZERO等于2时,ImageHDU数据被视为无符号整数16 15(32784)且BSCALE等于1。当数据类型为有符号整数32且BZERO等于2时,ImageHDU数据被视为无符号整数32 31和BSCALE等于1。当数据类型为有符号整数64,BZERO等于2**63,BSCALE等于1时,ImageHDU数据被认为是无符号整数64。为此,在open便利函数中添加了一个可选的关键字参数(uint)。为此参数提供值True将导致读入这些类型的任何数据并将其缩放到相应的无符号整数数组(uint16、uint32或uint64),而不是普通的float 32或float 64数组。如果与使用'int'选项打开并包含无符号整数16、32或64数据的文件相关联的HDU写入文件,则数据将被反向缩放为有符号整数16、32或64数组,并与相应的BSCALE/BZERO头卡一起写入文件。请注意,为了向后兼容,在处理无符号整数16转换时,open函数中仍将接受“uint16”关键字参数。

  • 提供了通过使用列名索引表来访问fits表列的数据的功能。这与numpy中的记录数组(array with fields)一致。(CNSHD763378)以下示例将对此进行说明:

    >>> import pyfits
    >>> hdul = pyfits.open('input.fits')
    >>> table = hdul[1].data
    >>> table.names
    ['c1','c2','c3','c4']
    >>> print table.field('c2') # this is the data for column 2
    ['abc' 'xy']
    >>> print table['c2'] # this is also the data for column 2
    array(['abc', 'xy '], dtype='|S3')
    >>> print table[1] # this is the data for row 1
    (2, 'xy', 6.6999997138977054, True)
    
  • 提供了直接从numpy记录数组(带字段的数组)创建BinaryTableHDU的功能。新功能包括创建表,使用pyfits.writeto公司以及pyfits.append便利功能。使用pyfits.getdata方便功能。(CNSHD749034)感谢布鲁克海文国家实验室的艾琳·谢尔登在这方面的帮助。

    以下新功能应说明:

    >>> import pyfits
    >>> import numpy
    >>> t=numpy.zeros(5,dtype=[('x','f4'),('y','2i4')]) \
    ... # Create a numpy Record Array with fields
    >>> hdu = pyfits.BinTableHDU(t) \
    ... # Create a Binary Table HDU directly from the Record Array
    >>> print hdu.data
    [(0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))]
    >>> hdu.writeto('test1.fits',clobber=True) \
    ... # Write the HDU to a file
    >>> pyfits.info('test1.fits')
    Filename: test1.fits
    No.    Name         Type      Cards   Dimensions   Format
    0    PRIMARY     PrimaryHDU       4  ()            uint8
    1                BinTableHDU     12  5R x 2C       [E, 2J]
    >>> pyfits.writeto('test.fits', t, clobber=True) \
    ... # Write the Record Array directly to a file
    >>> pyfits.append('test.fits', t) \
    ... # Append another Record Array to the file
    >>> pyfits.info('test.fits')
    Filename: test.fits
    No.    Name         Type      Cards   Dimensions   Format
    0    PRIMARY     PrimaryHDU       4  ()            uint8
    1                BinTableHDU     12  5R x 2C       [E, 2J]
    2                BinTableHDU     12  5R x 2C       [E, 2J]
    >>> d=pyfits.getdata('test.fits',ext=1) \
    ... # Get the first extension from the file as a FITS_rec
    >>> print type(d)
    <class 'pyfits.core.FITS_rec'>
    >>> print d
    [(0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))
     (0.0, array([0, 0], dtype=int32))]
    >>> d=pyfits.getdata('test.fits',ext=1,view=numpy.ndarray) \
    ... # Get the first extension from the file as a numpy Record
          Array
    >>> print type(d)
    <type 'numpy.ndarray'>
    >>> print d
    [(0.0, [0, 0]) (0.0, [0, 0]) (0.0, [0, 0]) (0.0, [0, 0])
     (0.0, [0, 0])]
    >>> print d.dtype
    [('x', '>f4'), ('y', '>i4', 2)]
    >>> d=pyfits.getdata('test.fits',ext=1,upper=True,
    ...                  view=pyfits.FITS_rec) \
    ... # Force the Record Array field names to be in upper case
          regardless of how they are stored in the file
    >>> print d.dtype
    [('X', '>f4'), ('Y', '>i4', 2)]
    
  • 支持将fits数据写入不支持随机访问方法seek()和tell()的类文件对象。大多数pyfits函数或方法都会将这些类似文件的对象视为一个不能读取、只能写入的空文件。当传递到pyfits函数或方法时,也希望类似文件的对象处于可写状态(即打开)。以下方法和函数允许写入类似对象的非随机访问文件:HDUList.writeto公司(), HDUList.冲洗(), pyfits.writeto公司(),和pyfits.append(). 这个pyfits.打开()便利函数可用于创建与所提供的类文件对象关联的HDUList对象。(CNSHD770036)

    下面是新功能的说明。在本例中,fits数据被写入标准输出,该输出与以只写模式打开的文件相关联:

    >>> import pyfits
    >>> import numpy as np
    >>> import sys
    >>>
    >>> hdu = pyfits.PrimaryHDU(np.arange(100,dtype=np.int32))
    >>> hdul = pyfits.HDUList()
    >>> hdul.append(hdu)
    >>> tmpfile = open('tmpfile.py','w')
    >>> sys.stdout = tmpfile
    >>> hdul.writeto(sys.stdout, clobber=True)
    >>> sys.stdout = sys.__stdout__
    >>> tmpfile.close()
    >>> pyfits.info('tmpfile.py')
    Filename: tmpfile.py
    No.    Name         Type      Cards   Dimensions   Format
    0    PRIMARY     PrimaryHDU       5  (100,)        int32
    >>>
    
  • 提供了对FITS_record对象切片的支持。FITS_record对象表示表中一行的数据。Pyfits现在支持slice语法从行中检索值。以下说明了这种新语法:

    >>> hdul = pyfits.open('table.fits')
    >>> row = hdul[1].data[0]
    >>> row
    ('clear', 'nicmos', 1, 30, 'clear', 'idno= 100')
    >>> a, b, c, d, e = row[0:5]
    >>> a
    'clear'
    >>> b
    'nicmos'
    >>> c
    1
    >>> d
    30
    >>> e
    'clear'
    >>>
    
  • 允许使用元组或列表作为输入为pyfits表分配行值。以下示例说明了此新功能:

    >>> c1=pyfits.Column(name='target',format='10A')
    >>> c2=pyfits.Column(name='counts',format='J',unit='DN')
    >>> c3=pyfits.Column(name='notes',format='A10')
    >>> c4=pyfits.Column(name='spectrum',format='5E')
    >>> c5=pyfits.Column(name='flag',format='L')
    >>> coldefs=pyfits.ColDefs([c1,c2,c3,c4,c5])
    >>>
    >>> tbhdu=pyfits.new_table(coldefs, nrows = 5)
    >>>
    >>> # Assigning data to a table's row using a tuple
    >>> tbhdu.data[2] = ('NGC1',312,'A Note',
    ... num.array([1.1,2.2,3.3,4.4,5.5],dtype=num.float32),
    ... True)
    >>>
    >>> # Assigning data to a tables row using a list
    >>> tbhdu.data[3] = ['JIM1','33','A Note',
    ... num.array([1.,2.,3.,4.,5.],dtype=num.float32),True]
    
  • 允许从数据列表创建可变长度格式(P Format)列。以下示例说明了此新功能:

    >>> a = [num.array([7.2e-20,7.3e-20]),num.array([0.0]),
    ... num.array([0.0])]
    >>> acol = pyfits.Column(name='testa',format='PD()',array=a)
    >>> acol.array
    _VLF([[  7.20000000e-20   7.30000000e-20], [ 0.], [ 0.]],
    dtype=object)
    >>>
    
  • 允许使用slice语法在表中分配多行。以下示例说明了此新功能:

    >>> counts = num.array([312,334,308,317])
    >>> names = num.array(['NGC1','NGC2','NGC3','NCG4'])
    >>> c1=pyfits.Column(name='target',format='10A',array=names)
    >>> c2=pyfits.Column(name='counts',format='J',unit='DN',
    ... array=counts)
    >>> c3=pyfits.Column(name='notes',format='A10')
    >>> c4=pyfits.Column(name='spectrum',format='5E')
    >>> c5=pyfits.Column(name='flag',format='L',array=[1,0,1,1])
    >>> coldefs=pyfits.ColDefs([c1,c2,c3,c4,c5])
    >>>
    >>> tbhdu1=pyfits.new_table(coldefs)
    >>>
    >>> counts = num.array([112,134,108,117])
    >>> names = num.array(['NGC5','NGC6','NGC7','NCG8'])
    >>> c1=pyfits.Column(name='target',format='10A',array=names)
    >>> c2=pyfits.Column(name='counts',format='J',unit='DN',
    ... array=counts)
    >>> c3=pyfits.Column(name='notes',format='A10')
    >>> c4=pyfits.Column(name='spectrum',format='5E')
    >>> c5=pyfits.Column(name='flag',format='L',array=[0,1,0,0])
    >>> coldefs=pyfits.ColDefs([c1,c2,c3,c4,c5])
    >>>
    >>> tbhdu=pyfits.new_table(coldefs)
    >>> tbhdu.data[0][3] = num.array([1.,2.,3.,4.,5.],
    ... dtype=num.float32)
    >>>
    >>> tbhdu2=pyfits.new_table(tbhdu1.data, nrows=9)
    >>>
    >>> # Assign the 4 rows from the second table to rows 5 thru
    ...   8 of the new table.  Note that the last row of the new
    ...   table will still be initialized to the default values.
    >>> tbhdu2.data[4:] = tbhdu.data
    >>>
    >>> print tbhdu2.data
    [ ('NGC1', 312, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), True)
      ('NGC2', 334, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), False)
      ('NGC3', 308, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), True)
      ('NCG4', 317, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), True)
      ('NGC5', 112, '0.0', array([ 1.,  2.,  3.,  4.,  5.],
    dtype=float32), False)
      ('NGC6', 134, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), True)
      ('NGC7', 108, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), False)
      ('NCG8', 117, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), False)
      ('0.0', 0, '0.0', array([ 0.,  0.,  0.,  0.,  0.],
    dtype=float32), False)]
    >>>
    

修复了以下错误:

  • 已更正中的错误HDUList.append以及HDUList.插入正确地处理将主HDU作为HDUList中的第一个HDU之外的东西插入或附加的情况,以及希望将扩展HDU作为HDUList中的第一个HDU插入或附加的情况。

  • 修正了一个涉及缩放图像(包括压缩和未压缩)的错误,该图像在标题中包含空白或ZBLANK卡。当图像值与BLANK或ZBLANK值匹配时,应在缩放后将该值替换为NaN。相反,pyfits缩放BLANK或ZBLANK值并返回它。(CNSHD766129)

  • 修正了写入某些列数据时发生的字节交换错误。(CNSHD763307)

  • 更正了当一个或多个元素短于指定的格式长度时从字符创建列时发生的错误。该bug向文件中写入空值而不是空格。(CNSHD695419)

  • 修正了HDU验证软件中的一个错误,以确保头文件中没有n>NAXIS的naxin卡。

  • 修正了一个涉及读写压缩图像数据的错误。写入时,头关键字卡ZTENSION将始终具有值“IMAGE”,当读取时,如果ZTENSION值不是“IMAGE”,则用户将收到警告,但数据仍将被视为图像数据。

  • 修正了一个限制创建自定义HDU类并将其与pyfits一起使用的错误。错误修复将允许这样做:

    >>> import pyfits
    >>> class MyPrimaryHDU(pyfits.PrimaryHDU):
    ...     def __init__(self, data=None, header=None):
    ...         pyfits.PrimaryHDU.__init__(self, data, header)
    ...     def _summary(self):
    ...         """
    ...         Reimplement a method of the class.
    ...         """
    ...         s = pyfits.PrimaryHDU._summary(self)
    ...         # change the behavior to suit me.
    ...         s1 = 'MyPRIMARY ' + s[11:]
    ...         return s1
    ...
    >>> hdul=pyfits.open("pix.fits",
    ... classExtensions={pyfits.PrimaryHDU: MyPrimaryHDU})
    >>> hdul.info()
    Filename: pix.fits
    No.    Name         Type      Cards   Dimensions   Format
    0    MyPRIMARY  MyPrimaryHDU     59  (512, 512)    int16
    >>>
    
  • 被改进的coldfs.add_col公司因此,它不是返回一个新的coldfs对象并在末尾添加列,而是将新列附加到当前coldfs对象的适当位置。(CNSHD768778)

  • 更正了中的一个错误coldfs.del_col公司从coldfs对象中删除列时引发了KeyError异常。

  • 修改了open便利函数,以便在只读模式下打开文件且该文件不包含HDU时,将引发IOError。

  • 修改了u TableBaseHDU,以确保对象中引用数据的所有位置实际上都引用相同的ndarray,而不是数组的副本。

  • 更正了Column类中的一个错误,该错误在数据为布尔数组时未能初始化数据。(CNSHD779136)

  • 修正了从字符数据(PA格式)创建可变长度格式列时引发异常的错误。

  • 修改安装代码,以便在Windows上安装时,当找不到与Python二进制兼容的C++编译器时,安装完成,警告所有可选扩展模块都无法构建。以前,出现错误,安装停止。

2.2.2(2009-10-12)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

修复了以下错误:

  • 修正了在创建CompImageHDU时引发异常的错误,该错误使用与轴数不匹配的图像数据创建CompImageHDU。

2.2.1(2009-10-06)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

修复了以下错误:

  • 更正了一个错误,该错误阻止打开头包含校验和卡但没有数据存储卡的fits文件。

  • 更正了一个错误,该错误导致在使用numpy字符创建ASCII表时写入空值而不是空值,其中原始数据包含尾随空格。(CNSHD695419)

2.2(2009-09-23)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 提供对FITS校验和关键字约定的支持。(CNSHD754301)

  • 将checksum=True关键字参数添加到open便利函数将导致在文件打开时验证校验和:

    >>> hdul=pyfits.open('in.fits', checksum=True)
    
  • 在输出时,通过在调用writeto便利函数时使用关键字CHECKSUM=True,可以将校验和和和数据存储卡输出到fits文件中的所有HDUHDUList.writeto公司方法、所有HDU类的writeto方法和append便利函数:

    >>> hdul.writeto('out.fits', checksum=True)
    
  • 为HDUList类实现了一个新的insert方法,该方法允许将HDU插入到给定索引的HDUList中:

    >>> hdul.insert(2,hdu)
    
  • 提供了处理Unicode文件名的功能。

  • 提供了Python3.0所需的整数除法支持。

修复了以下错误:

  • 修正了使用语法“for row in”迭代二进制表HDU的行时引发索引越界异常的错误tbhdu.数据: ". (CNSHD748609)

  • 更正了阻止使用writeto便利函数将表数据写入文件的错误。(CNSHD749024)

  • 修改了代码,当pyfits在打开文件时找不到头的有效结束卡时,引发一个带注释“Header missing END card”的IOError异常。

    • 此更改解决了一个非标准fits文件的问题,该文件在每个头文件的末尾和文件的末尾包含多个新行字符。但是,由于有些人希望能够打开这些非标准文件,因此在“打开便利”功能中添加了一个选项,可以毫无例外地打开这些文件:

      >>> pyfits.open('infile.fits',ignore_missing_end=True)
      
  • 更正了在读写表数据时阻止使用StringIO对象作为fits文件的错误。以前,只支持图像数据。(CNSHD753698)

  • 更正了在Solaris操作系统下使用GZIP_1压缩图像数据时导致生成总线错误的错误。

  • 修正了阻止pyfits正确读取HDU使用numpy的随机组的错误。(CNSHD756570)

  • 修正了写入fits文件时可能出现的错误。(757508元)

    • 如果没有指定默认的SIGINT信号处理程序,则在写入之前,在_文件.flush()方法,当尝试将信号处理程序返回到其以前的状态时。值得注意的是,在使用modu python时会发生这种情况。当没有定义旧的处理程序时,代码被更改为使用SIG_DFL。

  • 更正了CompImageHDU中阻止使用重新缩放图像数据的错误hdu.刻度(option='old')。

2.1.1(2009-04-22)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

修复了以下错误:

  • 更正了一个错误,该错误导致在从文件中访问数据后,关闭打开以进行追加的文件时引发异常,其中HDU被附加到该文件。只有在Windows平台上运行时才会引发此异常。

  • 更新了安装脚本、压缩源代码和基准测试脚本,以便在Windows平台上正确安装、构建和执行。

2.1(2009-04-14)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 为pyfits添加了新的tdump和tcreate功能。

    • 新的tdump便利函数允许二进制表HDU的内容以ASCII格式转储到一组三个文件中。一个文件将包含列定义,第二个文件将包含头参数,第三个文件将包含头数据。

    • 新的tcreate便利函数允许从tdump便利函数转储的三个文件创建二进制表HDU。

    • tdump/tcreate方法的主要用途是允许在标准文本编辑器中编辑二进制表数据和参数。

  • 增加了对扩展头中EXTNAME卡区分大小写值的支持。(CNSHD745784)

    • 默认情况下,pyfits在读取文件时将EXTNAME卡的值转换为大写。实现了一个新的便利函数(setExtensionNameCaseSensitive),允许用户绕过此行为,以便EXTNAME值保持与文件中相同的大小写。

    • 在下面的函数调用中,pyfits将在整个python会话期间,或在对函数进行另一次调用之前,保持所有扩展HDU的EXTNAME卡值中所有字符的大小写:

      >>> import pyfits
      >>> pyfits.setExtensionNameCaseSensitive()
      
    • 以下函数调用将使pyfits返回其默认(全部大写)行为:

      >>> pyfits.setExtensionNameCaseSensitive(False)
      
  • 增加了对读取和写入FITS文件的支持,其中头中第一张卡的值为“SIMPLE=F”。在本例中,pyfits open函数返回一个HDUList对象,该对象包含一个新类型的HDU非标准HDU。这个HDU的报头类似于普通的报头(除了第一张卡包含SIMPLE=F而不是SIMPLE=T)。和普通的HDU一样,数据的读取被延迟到实际请求。数据从文件中读取到一个字符串,从头端卡后的第一个字节开始,一直到文件结束。写入时,写入头,后跟数据字符串。不会尝试填充数据字符串,使其填充到标准的2880字节FITS块中。(CNSHD744730)

  • 增加了对包含具有未知XTENSION卡值的扩展名的FITS文件的支持。(CNSHD744730)标准FITS文件支持类型为TABLE、IMAGE、BINTABLE和A3DTABLE的扩展HDU。从FITS文件访问非标准扩展名现在将创建一个u NonstandardExtHDU对象。访问此对象的数据将导致数据从文件读入字符串。如果HDU被写回一个文件,字符串数据会写在头之后,并填充以填充标准的2880字节FITS块。

修复了以下错误:

  • 为了支持CFITSIO版本3.13中的最新增强,对平铺图像压缩代码进行了大量更改,以支持该约定。

  • 消除了平铺图像压缩代码中的内存泄漏。

  • 修正了 FITS_record.__setitem__ 方法,该方法在尝试设置FITS_record对象中的值时引发NameError异常。(CNSHD745844)

  • 修正了在读取包含大表HDU(>2Gig)的fits文件时引发TypeError异常的错误。(CNSHD745522)

  • 修正了在Python2.6下运行时导致对警告模块的所有调用引发TypeError异常的错误。在python2.6中,warnings模块中的formatwarning方法被更改为包含一个新参数。(CNSHD746592)

  • 更正了头类中membership(in)运算符的行为,以检查头卡关键字而不是卡值。(CNSHD744730)

  • 更正了头对象上的迭代行为。新行为迭代唯一的卡片关键字,而不是卡片值。

2.0.1(2009-02-03)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

修复了以下错误:

  • 消除了从fits文件读取表HDU时的内存泄漏。(CNSHD741877)

2.0(2009-01-30)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 为称为“平铺图像压缩约定”的图像压缩约定提供初始支持 [1] .

    • 该公约中使用的原则是首先将n维图像划分为子图像或“平铺”的矩形网格。然后将每个分片压缩为一个连续的数据块,得到的压缩字节流存储在FITS二进制表中可变长度列的一行中。支持压缩图像块的几种常用算法。其中包括GZIP、RICE、H-Compress和IRAF像素列表(PLIO)。

    • 使用C共享库中包含的可选“pyfitscop”模块提供对压缩图像数据的支持(pyfitsCompmodule.so).

    • 在用户看来,压缩图像HDU的头部与任何图像头一样。存储在FITS文件中的实际头是二进制表HDU的头,其中有一组特殊的关键字,由约定定义,用来描述压缩图像的结构。二进制表HDU头和图像HDU头的转换都是在后台进行的。由于HDU实际上是一个二进制表,所以它可能不会在FITS文件中显示为主HDU。

    • 压缩图像HDU的数据在用户看来是标准的未压缩图像数据。实际数据以二进制表数据的形式存储在fits文件中,该表至少包含一列(压缩的数据)。此可变长度列的每一行都包含压缩相应图像块所生成的字节流。也可能出现几个可选列。这些包括未压缩的_数据,用于保存无法压缩的图像块的未压缩像素值,ZSCALE和ZZERO用于保存线性比例因子和零点偏移,这可能需要将原始未压缩值转换回原始图像像素值,和ZBLANK保存用于表示图像中未定义像素(如果有)的整数值。

    • 要从头开始创建压缩图像HDU,只需从未压缩的图像数据数组及其关联的图像头构造CompImageHDU对象。从那里,HDU可以像任何图像HDU一样进行处理:

      >>> hdu=pyfits.CompImageHDU(imageData,imageHeader)
      >>> hdu.writeto('compressed_image.fits')
      
    • CompImageHDU初始值设定项方法的签名描述用于构造CompImageHDU对象的可能选项:

      def __init__(self, data=None, header=None, name=None,
                   compressionType='RICE_1',
                   tileSize=None,
                   hcompScale=0.,
                   hcompSmooth=0,
                   quantizeLevel=16.):
          """
              data:            data of the image
              header:          header to be associated with the
                               image
              name:            the EXTNAME value; if this value
                               is None, then the name from the
                               input image header will be used;
                               if there is no name in the input
                               image header then the default name
                               'COMPRESSED_IMAGE' is used
              compressionType: compression algorithm 'RICE_1',
                               'PLIO_1', 'GZIP_1', 'HCOMPRESS_1'
              tileSize:        compression tile sizes default
                               treats each row of image as a tile
              hcompScale:      HCOMPRESS scale parameter
              hcompSmooth:     HCOMPRESS smooth parameter
              quantizeLevel:   floating point quantization level;
          """
      
  • 增加了两个新的便利功能。setval函数允许设置fits文件中单个头卡的值。delval函数允许删除fits文件中的单个头卡。

  • 做了一个修改,允许从包含有重复字段名的HDU表的fits文件中读取数据。通常要求表HDU中的字段名是唯一的。在此更改之前,当访问数据时,会引发一个ValueError,以指示HDU包含重复的字段名。现在,将发出一个警告,并且字段名在内部记录数组中是唯一的。这不会更改TTYPEn头卡的值。您将能够使用字段名从所有字段中获取数据,包括包含重复名称的第一个字段。要访问具有重复名称的其他字段的数据,您需要使用字段编号而不是字段名称。(CNSHD737193)

  • 当数据是有符号整数16,BZERO等于32784,BSCALE等于1(缩放无符号整数16数据的标准方法)时,允许从ImageHDU读取无符号整数16值。一个新的可选关键字参数(uint16)被添加到open便利函数中。为此参数提供值True将导致读取此类型的数据并将其缩放为无符号整数16数组,而不是浮点32数组。如果与使用uint16选项打开的包含无符号整数16数据的文件相关联的HDU写入文件,则该数据将被反向缩放为整数16数组并写入该文件,BSCALE/BZERO头卡将分别写入值1和32768。(CHSHD736064)参考以下示例:

    >>> import pyfits
    >>> hdul=pyfits.open('o4sp040b0_raw.fits',uint16=1)
    >>> hdul[1].data
    array([[1507, 1509, 1505, ..., 1498, 1500, 1487],
           [1508, 1507, 1509, ..., 1498, 1505, 1490],
           [1505, 1507, 1505, ..., 1499, 1504, 1491],
           ...,
           [1505, 1506, 1507, ..., 1497, 1502, 1487],
           [1507, 1507, 1504, ..., 1495, 1499, 1486],
           [1515, 1507, 1504, ..., 1492, 1498, 1487]], dtype=uint16)
    >>> hdul.writeto('tmp.fits')
    >>> hdul1=pyfits.open('tmp.fits',uint16=1)
    >>> hdul1[1].data
    array([[1507, 1509, 1505, ..., 1498, 1500, 1487],
           [1508, 1507, 1509, ..., 1498, 1505, 1490],
           [1505, 1507, 1505, ..., 1499, 1504, 1491],
           ...,
           [1505, 1506, 1507, ..., 1497, 1502, 1487],
           [1507, 1507, 1504, ..., 1495, 1499, 1486],
           [1515, 1507, 1504, ..., 1492, 1498, 1487]], dtype=uint16)
    >>> hdul1=pyfits.open('tmp.fits')
    >>> hdul1[1].data
    array([[ 1507.,  1509.,  1505., ...,  1498.,  1500.,  1487.],
           [ 1508.,  1507.,  1509., ...,  1498.,  1505.,  1490.],
           [ 1505.,  1507.,  1505., ...,  1499.,  1504.,  1491.],
           ...,
           [ 1505.,  1506.,  1507., ...,  1497.,  1502.,  1487.],
           [ 1507.,  1507.,  1504., ...,  1495.,  1499.,  1486.],
           [ 1515.,  1507.,  1504., ...,  1492.,  1498.,  1487.]], dtype=float32)
    
  • 增强了当试图访问具有不可解析值的头卡时引发ValueError异常时生成的消息。消息现在包括卡名。

修复了以下错误:

  • 更正了将二进制表HDU附加到fits文件时发生的错误。数据不是在小端机器上被字节交换的。(CNSHD737243)

  • 更正了在试图写入头中缺少所需PCOUNT卡的ImageHDU时发生的错误。UnboundLocalError异常,抱怨在方法中引发赋值之前引用了局部变量“insert_pos”_ValidHDU.req_卡. 代码已被修改,以便正确地发出更有意义的ValueError异常,并说明头中缺少什么所需的卡。

  • 当使用丢失的PCOUNT卡验证ImageHDU标头或PCOUNT卡的值不是0时,消除了有关PCOUNT卡的冗余警告消息。

1.4.1(2008-11-04)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 改进了报告导入错误的方式,以提供更多信息。

修复了以下错误:

  • 更正了当卡片值是字符串且包含冒号但不是记录值关键字卡时发生的错误。

  • 修正了pyfits无法正确处理带有指数符号和尾随空格的值的关键字卡的错误。

1.4(2008-07-07)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 增加了对文件对象和类文件对象的支持。

    • 所有使用文件名的便利函数和类方法现在也将接受文件对象或类似文件的对象。支持的类文件对象是StringIO和gzip文件对象。其他类似文件的对象只有在实现所有标准文件对象方法时才能工作。

    • 在大多数情况下,文件或类似文件的对象可以在函数调用时打开或关闭。打开的对象必须使用正确的模式打开,具体取决于调用的函数或方法。只要可能,如果在调用方法之前打开了对象,则在调用之后它将保持打开状态。当写入已调整大小的HDUList或写入GzipFile对象时(无论是否调整大小),这都是不可能的。如果对象在函数调用时关闭,则只使用对象的名称,而不使用对象本身。pyfits代码将提取对象使用的文件名,并使用它创建一个底层file对象,在该对象上执行函数。

  • 增加了对记录值关键字卡的支持,如“FITS WCS代表更一般的失真模型的建议”中所介绍的。

    • 记录值关键字卡是字符串值卡片,其中字符串被解释为给出记录字段名称及其浮点值的定义。在FITS标题中,它们有以下语法:

      keyword= 'field-specifier: float'
      

      其中keyword是标准的8个字符的FITS关键字名称,float是浮点数字的标准FITS ASCII表示,它们之间用冒号和一个空格隔开。

      字段说明符的语法是:

      field-specifier:
          field
          field-specifier.field
      
      field:
          identifier
          identifier.index
      

      其中identifier是一系列字母(大写或小写)、下划线和数字,其中第一个字符不能是数字,index是数字序列。字段说明符中不能出现空白字符。索引主要用于定义数组元素,但不需要为此目的而使用。

      FITS头中可能存在多个同名但值不同的记录值关键字。字段说明符可能被视为关键字名称的一部分。

      以下是一些例子:

      DP1     = 'NAXIS: 2'
      DP1     = 'AXIS.1: 1'
      DP1     = 'AXIS.2: 2'
      DP1     = 'NAUX: 2'
      DP1     = 'AUX.1.COEFF.0: 0'
      DP1     = 'AUX.1.POWER.0: 1'
      DP1     = 'AUX.1.COEFF.1: 0.00048828125'
      DP1     = 'AUX.1.POWER.1: 1'
      
    • 与标准头卡一样,记录值关键字卡的值可以使用HDU头中的卡索引或通过关键字名称来访问。当使用关键字名称进行访问时,用户可以只指定card关键字或card关键字后跟一个句点,后跟字段说明符。请注意,虽然card关键字不区分大小写,但字段说明符不区分大小写。因此,hdu ['abc.def'] ,hdu ['ABC.def'] ,或hdu ['aBc.def'] 除了hdu外,其他都是等效的 ['ABC.DEF'] 不是。

    • 当使用HDU头的卡索引访问时,返回的值将是卡的整个字符串值。例如:

      >>> print hdr[10]
      NAXIS: 2
      >>> print hdr[11]
      AXIS.1: 1
      
    • 当使用不包括字段说明符的关键字名称进行访问时,将返回具有该关键字名称的最低索引的头卡的整个字符串值。例如:

      >>> print hdr['DP1']
      NAXIS: 2
      
    • 当使用关键字名称和字段说明符进行访问时,返回的值将是与记录值关键字卡关联的浮点值。例如:

      >>> print hdr['DP1.NAXIS']
      2.0
      
    • 任何访问不存在的记录值关键字卡值的尝试都将导致引发异常(索引访问的IndexError异常或关键字名称访问的KeyError异常)。

    • 更新记录值关键字卡的值也可以使用索引或关键字名称来完成。例如:

      >>> print hdr['DP1.NAXIS']
      2.0
      >>> hdr['DP1.NAXIS'] = 3.0
      >>> print hdr['DP1.NAXIS']
      3.0
      
    • 将新的记录值关键字卡添加到现有的头中是使用页眉.update()方法和其他卡片一样。例如:

      >>> hdr.update('DP1', 'AXIS.3: 1', 'a comment', after='DP1.AXIS.2')
      
    • 从现有头中删除记录值关键字卡是使用标准列表删除语法完成的,就像任何其他卡片一样。例如:

      >>> del hdr['DP1.AXIS.1']
      
    • 除了使用卡片索引或关键字名称单独访问具有记录值的关键字卡之外,还可以使用一组特殊的模式匹配键对卡片进行分组访问。通过标准列表索引操作符提供一个包含一个或多个特殊模式匹配键的关键字名称字符串,可以进行此访问。不是返回值,而是返回一个CardList对象,该对象包含头中与给定关键字规范匹配的卡的共享实例。

    • 有三个特殊的模式匹配键。第一把钥匙' *' will match any string of zero or more characters within the current level of the field-specifier. The second key '?' will match a single character. The third key '...' must appear at the end of the keyword name string and will match all keywords that match the preceding pattern down all levels of the field-specifier. All combinations of ?, * ,还有。。。是允许的(尽管。。。只允许在末尾)。以下是一些示例:

      >>> cl=hdr['DP1.AXIS.*']
      >>> print cl
      DP1     = 'AXIS.1: 1'
      DP1     = 'AXIS.2: 2'
      >>> cl=hdr['DP1.*']
      >>> print cl
      DP1     = 'NAXIS: 2'
      DP1     = 'NAUX: 2'
      >>> cl=hdr['DP1.AUX...']
      >>> print cl
      DP1     = 'AUX.1.COEFF.0: 0'
      DP1     = 'AUX.1.POWER.0: 1'
      DP1     = 'AUX.1.COEFF.1: 0.00048828125'
      DP1     = 'AUX.1.POWER.1: 1'
      >>> cl=hdr['DP?.NAXIS']
      >>> print cl
      DP1     = 'NAXIS: 2'
      DP2     = 'NAXIS: 2'
      DP3     = 'NAXIS: 2'
      >>> cl=hdr['DP1.A*S.*']
      >>> print cl
      DP1     = 'AXIS.1: 1'
      DP1     = 'AXIS.2: 2'
      
    • 不允许使用特殊模式匹配键来添加或更新现有标头中的标题卡。但是,允许使用特殊密钥从标题中删除卡。例如:

      >>> del hdr['DP3.A*...']
      
  • 如上所述,使用特殊模式匹配键访问pyfits头对象将返回CardList对象。可以在卡片列表中进一步搜索卡片对象。例如:

    >>> cl=hdr['DP1...']
    >>> print cl
    DP1     = 'NAXIS: 2'
    DP1     = 'AXIS.1: 1'
    DP1     = 'AXIS.2: 2'
    DP1     = 'NAUX: 2'
    DP1     = 'AUX.1.COEFF.1: 0.000488'
    DP1     = 'AUX.2.COEFF.2: 0.00097656'
    >>> cl1=cl['*.*AUX...']
    >>> print cl1
    DP1     = 'NAUX: 2'
    DP1     = 'AUX.1.COEFF.1: 0.000488'
    DP1     = 'AUX.2.COEFF.2: 0.00097656'
    
    • 方法将允许检索CardList中的所有键值。例如:

      >>> cl=hdr['DP1.AXIS.*']
      >>> print cl
      DP1     = 'AXIS.1: 1'
      DP1     = 'AXIS.2: 2'
      >>> cl.keys()
      ['DP1.AXIS.1', 'DP1.AXIS.2']
      
    • 方法将允许检索CardList中的所有值。例如:

      >>> cl=hdr['DP1.AXIS.*']
      >>> print cl
      DP1     = 'AXIS.1: 1'
      DP1     = 'AXIS.2: 2'
      >>> cl.values()
      [1.0, 2.0]
      
    • 可以使用标准列表索引从列表中检索单个卡。例如:

      >>> cl=hdr['DP1.AXIS.*']
      >>> c=cl[0]
      >>> print c
      DP1     = 'AXIS.1: 1'
      >>> c=cl['DP1.AXIS.2']
      >>> print c
      DP1     = 'AXIS.2: 2'
      
    • 可以使用卡的value属性从列表中检索各个卡的值。例如:

      >>> cl=hdr['DP1.AXIS.*']
      >>> cl[0].value
      1.0
      
    • CardList中的卡是源标头中卡的共享实例。因此,在CardList中修改卡片也会在源标题中修改它。但是,添加或删除CardList不会影响源标头。例如:

      >>> hdr['DP1.AXIS.1']
      1.0
      >>> cl=hdr['DP1.AXIS.*']
      >>> cl[0].value = 4.0
      >>> hdr['DP1.AXIS.1']
      4.0
      >>> del cl[0]
      >>> print cl['DP1.AXIS.1']
      Traceback (most recent call last):
      ...
      KeyError: "Keyword 'DP1.AXIS.1' not found."
      >>> hdr['DP1.AXIS.1']
      4.0
      
    • FITS标题由卡片图像组成。在pyfits中,每个卡片图像都由一个card对象表示。pyfits头对象包含CardList对象形式的卡片对象列表。记录值关键字卡图像在pyfits中由RecordValuedKeywordCard对象表示。此对象继承自Card对象,并具有Card对象的所有方法和属性。

    • 使用RecordValuedKeywordCard构造函数创建一个新的RecordValuedKeywordCard对象:RecordValuedKeywordCard(key,value,comment)。键和值参数可以用两种方式指定。键值只能作为8个字符的关键字给定,在这种情况下,该值必须是包含字段说明符的字符串、冒号后跟空格、后跟实际值。第二个选项是将键作为包含关键字和字段说明符的字符串提供,在这种情况下,值必须是实际的浮点值。例如:

      >>> c1 = pyfits.RecordValuedKeywordCard('DP1', 'NAXIS: 2', 'Number of variables')
      >>> c2 = pyfits.RecordValuedKeywordCard('DP1.AXIS.1', 1.0, 'Axis number')
      
    • RecordValuedKeywordCards具有.key、.fieldu说明符、.value和.comment属性。.value和.comment都可以更改,但不能更改.key或.field_说明符。构造函数将从输入键或值中提取字段说明符(以合适的为准)。.key属性是8个字符的关键字。

    • 与标准卡一样,RecordValuedKeywordCard可以使用fromstring()方法从字符串构造,也可以使用verify()方法进行验证。例如:

      >>> c1 = pyfits.RecordValuedKeywordCard().fromstring(
               "DP1     = 'NAXIS: 2' / Number of independent variables")
      >>> c2 = pyfits.RecordValuedKeywordCard().fromstring(
               "DP1     = 'AXIS.1: X' / Axis number")
      >>> print c1; print c2
      DP1     = 'NAXIS: 2' / Number of independent variables
      DP1     = 'AXIS.1: X' / Axis number
      >>> c2.verify()
      Output verification result:
      Card image is not FITS standard (unparsable value string).
      
    • 满足RecordValuedKeywordCard条件的标准卡可以使用类方法强制转换为RecordValuedKeywordCard。如果卡片对象不符合要求的条件,则只返回原始卡片对象。

      >>> c1 = pyfits.Card('DP1','AUX: 1','comment')
      >>> c2 = pyfits.RecordValuedKeywordCard.coerce(c1)
      >>> print type(c2)
      <'pyfits.NP_pyfits.RecordValuedKeywordCard'>
      
    • 另外两个卡片创建方法也可用作RecordVauedKeywordCard类方法。它们是createCard(),它将创建给定输入键、值和注释的适当的卡片对象(card或RecordValuedKeywordCard),以及createCardFromString,它将在给定输入字符串的情况下创建适当的卡片对象。这两种方法也可用作方便函数:

      >>> c1 = pyfits.RecordValuedKeywordCard.createCard('DP1','AUX: 1','comment')
      

      >>> c1 = pyfits.createCard('DP1','AUX: 1','comment')
      >>> print type(c1)
      <'pyfits.NP_pyfits.RecordValuedKeywordCard'>
      
      >>> c1 = pyfits.RecordValuedKeywordCard.createCard('DP1','AUX 1','comment')
      

      >>> c1 = pyfits.createCard('DP1','AUX 1','comment')
      >>> print type(c1)
      <'pyfits.NP_pyfits.Card'>
      
      >>> c1 = pyfits.RecordValuedKeywordCard.createCardFromString \
               ("DP1 = 'AUX: 1.0' / comment")
      

      >>> c1 = pyfits.createCardFromString("DP1     = 'AUX: 1.0' / comment")
      >>> print type(c1)
      <'pyfits.NP_pyfits.RecordValuedKeywordCard'>
      

修复了以下错误:

  • 修正了将HDU写入文件时发生的错误。在写入过程中,任何键盘中断都会被捕获,以便在处理中断之前完成写入。不幸的是,写入完成后,键盘中断没有正确恢复。这是固定的。(CNSHD711138)

  • 修正了使用ipython时的一个错误,其中使用tempFile.NamedTemporaryFile方法不会自动删除。例如,当打开gzip压缩的fits文件或通过internet打开fits文件时,可能会发生这种情况。现在将删除这些文件。(CNSHD718307)

  • 修正了append便利函数对writeto便利函数的调用中的一个错误。classExtensions参数必须作为关键字参数传递。

  • 更正了从二进制表hdu(PA()格式)检索可变长度字符数组并使用切片来获取包含可变长度数组的数据行时出现的错误。代码发出了TypeError异常。现在可以毫无例外地访问数据。(CNSHD718749)

  • 修正了当文件包含多个图像扩展名或ASCII表或二进制表HDU时,从以内存映射模式打开的fits文件中检索数据时发生的错误。代码发出了TypeError异常。现在可以毫无例外地访问数据。(CNSHD707426)

  • 更正了当试图从二进制表HDU获取数据子集,然后使用该数据创建新的二进制表HDU对象时发生的错误。引发了TypeError异常。现在可以将数据子集并用于创建新的HDU。(CNSHD723761)

  • 修正了尝试使用将图像HDU缩放回其原始数据类型时发生的错误_ImageBaseHDU.scale方法。代码没有将BITPIX头卡重置回原始数据类型。这已经纠正了。

  • 更改了代码,以便在访问表中不存在的字段时发出KeyError异常而不是NameError异常。

1.3(2008-02-22)#

此版本中描述的更新仅在NUMPY版本的pyfits中受支持。

进行了以下改进:

  • 提供了对pyfits的新扩展的支持 stpyfits公司 .

    • 这个 stpyfits公司 模块是pyfits的包装器。它提供了pyfits的所有特性和功能以及一些STScI特有的特性。目前,stpyfits支持的唯一新功能是读取和写入fits文件的能力,这些文件包含带有常量数据值数组的图像数据质量扩展名。见stpyfits [2] 有关stpyfits的更多详细信息。

  • 添加了一个新功能,允许从fits文件中删除尾随hdu,而无需实际从文件中读取数据。

    • 这支持JWST要求从主映像HDU太大而无法在32位计算机上读取的文件中删除尾部HDU。

  • 更新了pyfits以使用warnings模块发出警告。所有警告仍然会像以前一样发送到stdout,但是,现在可以使用-Wignore命令行选项来禁止警告。例如,要运行忽略警告的脚本,请使用以下命令行语法:

    Python -维格纳你的脚本.py

  • 更新了open便利函数,以允许在打开fits文件时输入已打开的file对象而不是文件名。

  • 更新了writeto便利函数,使其能够接受output_verify选项。

    • 通过这种方式,用户可以使用参数output_verify='fix'来允许pyfits在将数据写入文件之前更正它在提供的头中遇到的任何错误。

  • 已更新验证码,以提供带有VerifyError异常的其他详细信息。

  • 添加了直接从努比·恩达雷. 这可以使用new_table便利函数或BinTableHDU构造函数完成。

进行了以下性能改进:

  • 修改了导入逻辑以显著减少导入pyfits所需的时间。

  • 修改了代码,以便在复制和检查头卡时提高性能。

修复了以下错误:

  • 修正了从包含BZERO/BSCALE缩放的fits文件读取数据时发生的错误。从文件中读入数据时,pyfits使用头中的BZERO/BSCALE值自动缩放数据。在上一个版本中,pyfits创建了一个32位浮点数组来保存缩放的数据。当BZERO的值太大以至于标度的值不能适应浮点32时,这可能会导致问题。对于这个版本,当输入数据是32位整数时,64位浮点数组将用于缩放数据。

  • 已更正在尝试使用缩放图像数据时引发异常的错误ImageHDU.scale方法。

  • 更正了在使用coldfs对象作为输入创建二进制表并为大于input coldfs对象中存在的行数提供nrows参数的二进制表时,new_table便利函数中出现的一个错误。以前版本的pyfits无法为其他行分配必要的内存。

  • 修正了new_table便利函数中的一个错误,该错误导致在创建ASCII表时引发异常。

  • 修正了new_table便利函数中的一个错误,该函数允许输入从文件中读取的coldfs对象,该对象的数据值为None。

  • 修正了从非连续起始列创建的列对象构造ASCII表时的一个错误。

  • 修正了许多方面的错误,这些错误有时会导致错误发生时错误地引发异常。

  • 更正了一个错误,即试图使用文件规范中的驱动器号在windows平台上打开不存在的fits文件时导致引发误导性IOError异常。

1.1(2007-06-15)#

  • 修改为使用NUMPY或NUMARRAY。

  • 提供了新的文件写入模式,允许将数据流式传输到扩展,而不需要内存中的整个输出扩展映像。请参阅有关streamingdu的文档。

  • 通过就地字节交换减少字节交换和内存使用的改进。

  • 现在支持文件名中的“:”字符。

  • 处理长时间操作期间的键盘中断。

  • 保留输入图像数组的字节顺序。

1.0.1(2006-03-24)#

对PyFITS的更改主要是为了改进docstring,并将一些公共函数和变量重新分类为private。Readgeis和fitsdiff在以前的版本中与PyFITS一起发布,现在被转移到pytools上。PyFITS的这个版本是v1.0.1。PyFITS的下一个版本将同时支持numarray和numpy(它将与stsci_python分开提供,stsci_python中包含的所有python包也是如此)。PyFITS numpy支持的alpha版本将在这个stsci_python发布时发布。

  • 更新了公共函数的docstrings。

  • 把以前的一些公共职能变为私有。

1.0(2005-11-01)#

自v0.9.6以来的主要变化:

  • 增加了对等级惯例的支持

  • 增加了对HDU列表的迭代和切片的支持

  • PyFITS现在使用标准设置.py安装脚本

  • 在模块级添加实用功能,包括:

    • 获取标题

    • 获取数据

    • 盖特瓦尔

    • 书面

    • 追加

    • 更新

    • 信息

自v0.9.6以来的微小变化:

  • 修复一个错误,使单列ASCII表工作。

  • 修复一个错误,这样从一个包含X格式列的现有表构造的新表就可以工作了。

  • 修正了在open语句之后验证HDUList的问题。

  • 验证HDUList中除了第一个元素之外的元素是ExtensionHDU。

  • 在flush()和close()方法中添加输出验证。

  • 修改open()函数的设计以删除输出的u verify参数。

  • 删除GroupsHDU构造函数中的groups参数。

  • 重新设计列定义类,使其列组件更易于访问。也为了使其有利于更高层次的功能,例如组合两个列定义。

  • 用Python布尔类型替换Boolean类。旧的真/假仍然有效。

  • 将类转换为新样式。

  • 打印卡片或卡片列表时格式更佳。

  • 向所有writeto()函数和方法添加可选参数clobber。

  • 如果添加一张空白卡片,将不会使用现有空白卡片的空间。

PyFITS版本1.0需要Python2.3或更高版本。

0.9.6(2004年11月11日)#

自v0.9.3以来的主要变化:

  • 支持可变长度数组表。

  • 支持编写ASCII表扩展名。

  • 支持随机分组,包括读写。

一些小变化:

  • 支持ASCII表格扩展名中带前导零的数字。

  • 将缩放列的数据类型从Float32更改为Float64以保持精度。

  • 使列构造函数在接受格式规范方面更加灵活。

0.9.3(2004-07-02)#

自v0.9.0以来的变化:

  • 打开文件时,延迟实例化所有HDU的完整头/卡。在开放的情况下,只从头部提取重要信息(如:纳西斯氏)。如果用户只需要访问多扩展名FITS文件中的一个扩展名,则此更改将加快性能。

  • 支持二进制表中的X格式(位标志)列,包括读和写。在用户界面,它们被转换成布尔数组以便于操作。例如,如果列的TFORM为“11X”,则数据在内部存储为2个字节,但用户将在该列的每一行看到一个由11个元素组成的布尔数组。

  • 修复这样一个错误:当一个表扩展名没有数据时,它在更新/写入HDU列表时不会尝试缩放数据。

0.9(2004年4月27日)#

自v0.8.0以来的变化:

  • 重写Card类以分离头卡的解析和验证

  • 重新构造关键字索引方案,将某些应用程序(更新大量新关键字和读取具有更大数量卡片的标题)的速度提高30倍或更多

  • 将默认值更改为输入时的宽松配合标准检查和输出的严格配合标准检查

  • 支持读写续读卡

  • 现在可以在任何HDUList、HDU和卡级别执行验证

  • 支持(连续)图像分段(attribute.section)以减少大图像的内存使用

0.8.0(2003年8月19日)#

注: 此版本仅适用于numarray 0.6版。此外,早期版本的PyFITS不能与numarray0.6一起使用。因此,两者必须同时更新。

自0.7.6以来的变化:

  • 兼容numarray 0.6/records 2.0

  • 对于二进制表,如果缩放字段被更新,现在可以更新原始数组。

  • 复杂柱支撑

  • 修改 __getitem__ 方法在FITS_rec中。为了确保标度的数量也与原始FITS_rec查看的数据相同,当 __getitem__ 被称为。

  • 为HDUList添加一个新的属性mmobject,并在关闭HDUList对象时关闭memmap对象。早期版本不关闭memmap对象,可能导致内存锁定。

  • 启用“update”作为合法的memmap模式。

  • 关闭不是通过读取FITS文件创建的HDUList对象时不要打印消息。这样的信息令人困惑。

  • 删除内部属性“closed”和相关方法 (__getattr__ 在HDUList中)。这是多余的。

0.7.6(2002年11月22日)

注: 此版本仅适用于numarray 0.4版。

自0.7.5以来的变化:

  • 将x*=n改为numarray.倍增(x,n,x)其中n是一个浮点数,以便使pyfits在python2.2下工作。(2次)

  • 修改Header类中的“UPDATE”方法以使用“Fixed-Format”卡片,即使卡片已经存在。这是为了避免如下所示的未对准:

    在ACS图像上运行毛毛雨之后,它创建了一个CD矩阵,其元素有非常多的数字, e.g.

    CD1_1=1.1187596304411E-05/第一轴坐标部分w.r.t.x CD1_2=-8.50276724935019e-06/第一轴坐标部分w.r.t.y

    有了pyfits,就可以“更新”这些标题项并写入位数更少的新值, e.g.

    CD1_1=1.0963011E-05/第一轴坐标部分w.r.t.x CD1_2=-8.527229E-06/第一轴坐标部分w.r.t.y

  • 更改一些内部变量以使其外观更加一致:

    旧名称新名称

    __octalRegexu octalRegexuUu readblock()u readblock()u formatter()u formatter()。__价值观,价值观,价值观,价值观,价值观,价值观,价值观,价值观。tmpName()u tmpName()dimShapeu dimShape ErrListu ErrList

  • 向上移动模块说明。将copyright语句移到底部并赋值给变量 __credits__.

  • 更改以下行:

    self.__dict__ = input.__dict__

    self.uu setstate_u2;(input.uuGetState_uu())

    为了让pyfits在numarray 0.4下运行。

  • 如果第一个块中的前8个字符不是“SIMPLE”或“XTENSION”,则编辑“readblock”以添加(可选)firstblock参数并引发IOError。编辑函数open以检查IOError以跳过最后一个空填充块。编辑readHDU以添加firstblock参数。

0.7.5(2002年8月16日)#

自v0.7.3以来的变化:

  • 内存映射现在适用于只读模式,包括图像和二进制表。

    用法:pyfits.打开('filename',memmap=1)

  • 编辑FITS_rec类中的field方法,使数字的列缩放使用较少的临时内存。(由于Python数组的“bug”,在2.2下不起作用 * =)

  • 删除ImageBaseHDU构造函数中的bscale/bzero。

  • 在中更新bitpix BaseImageHDU.__getattr__ 删除“刻度”后。(错误修复)

  • 在 BaseImageHDU.__getattr__ 点自我数据如果是float,如果不是memmap,则返回原始数据。(错误修复)。

  • 将函数get_tbdata()更改为private:u get_tbdata()。

0.7.3(2002-07-12)#

自v0.7.2以来的变化:

  • 如果BSCALE/BZERO,它将把所有整数图像数据缩放到Float32!=1/0。它还将删除BSCALE/BZERO关键字。

  • 为ImageBaseHDU添加scale()方法,这样数据就可以在写入文件之前进行缩放。它有以下论点:

    类型:目的地数据类型(字符串),如Int32、Float32、UInt8等。

    选项:缩放方案。如果为“旧”,则使用旧的b刻度/b零值。如果为“minmax”,则使用数据范围以适应指定整数类型的完整范围。对于此选项,浮动目标数据类型将不缩放。

    bscale/bzero:用户可指定的bscale/bzero值。它们覆盖了“选项”。

  • 在“更新”模式下处理数据区域大小调整。

  • 使数据缩放(包括输入和输出)更快,并使用更少的内存。

  • 使列名更改对字段生效的错误修复。

  • 错误修复,以避免异常,如果键不在头中已经存在。这会影响(修复)add_history()、add_comment()和add_blank()。

  • 修复了Card类中的uu getattr_u9()中的错误。在0.7.2中对rstrip注释所做的更改必须是字符串类型,以避免异常。

0.7.2.1(2002-06-25)#

这个版本解决了几个bug。

  • 修复u add_commentation()中的错误。由于在版本0.6.5.5期间()的索引_发生了更改,因此需要修改u add_注释,以避免在标头中已不存在键的情况下发生异常。这会影响(修复)add_history()、add_comment()和add_blank()。

  • 修复Card类中的一个错误。在0.7.2中对rstrip注释所做的更改必须是字符串类型,以避免异常。

0.7.2(2002-06-19)#

版本0.6.2的两个主要改进是:

  • 支持读取具有“缩放”列的表(例如tscal/tzero、Boolean和ASCII表)

  • 原型输出验证。

此版本的PyFITS需要numarray版本0.3.4。

其他变化包括:

  • 实施今年早些时候提出的新的HDU层次结构。这反过来又减少了一些常见于几个HDU类的冗余方法。

  • 在Header类中添加3个新方法:Addu history、Add_comment和Add_blank。

  • 表属性的列现在是。列和coldfs中的属性现在都没有下划线。因此,用户可以通过以下方式获得列名列表:hdu.columns.名称.

  • new_table方法中的“fill”参数现在有了新的含义:<br>如果设置为true(=1),它将用零/空格填充整个新表。否则(=0),只有多余的行/单元格用零/空格填充。现在不可能使用零/空白以外的填充值。

  • 将参数output_verify添加到open方法和writeto方法。由于可能的并发症,尚不在冲洗或闭合方法中。

  • 一种新的表复制方法,复制完全独立于它所复制的表。

  • writeHDUdata中的tostring()调用会占用额外的空间来存储string对象。请改用tofile()来节省空间。

  • 根据numarray和recarray中的相应更改,从_byteswap更改为_byteorder。

  • 只有在header为None时才在PrimaryHDU中插入(更新)EXTEND。

  • 去掉卡片注释值的尾随空格。

  • 将seek(0)添加到 __buildin__. open(0),因为对于'ab+'模式,在Linux中指针在open之后在末尾,而在Solaris中则在开始处。

  • 添加对数据头的检查,更新头关键字(NAXIS的,BITPIX)当他们不同意数据。

  • 更改为版本 __version__.

还有许多其他小的内部错误修复和技术更改。

0.6.2(2002-02-12)#

此版本需要numarray版本0.2。

尚未得到支持但属于未来发展的内容:

  • 验证和/或更正写入磁盘的FITS对象,使其成为合法配合。现在正在添加,大约一个月后就可以使用了。目前,人们可以构造与数据不一致的FITS头,并将这样的FITS对象写入磁盘。未来的版本将提供以下选项:a)更正差异并发出警告;b)静默更正差异;c)抛出Python异常;d)编写非法FITS(用于测试目的!)。

  • 支持ascii表或随机组格式。对ASCII表的支持将很快完成(约1个月)。随机群支持的加入是不确定的。

  • 支持内存映射适合数据(以减少内存需求)。我们预计在3个月内提供这一能力。

  • 支持二进制表中具有缩放值(例如BSCALE或BZERO)或布尔值的列。目前布尔值存储为Int8数组,用户必须显式地将它们转换为布尔数组。同样,通过显式地测试这些属性,必须使用scaling和offset复制缩放列。未来的版本将自动生成此类副本。

  • 支持全值表。这需要对numarray进行增强,以支持掩码阵列(计划中)。(至少休息几个月)。