astropy.io.fits 演进史:PyFITS 并入 Astropy 前的版本历程与技术沉淀 科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载astropy.io.fits是 Astropy 中负责读写 FITSFlexible Image Transport System文件的核心子包其前身是独立发布的 PyFITS 库。本指南以 history.rst 这份官方历史文档为骨架系统梳理 PyFITS 从 0.6.2 到 3.4.0 的完整版本脉络提炼其在 Header 接口、表读写、图像压缩、校验机制、内存映射等方向上的技术演进并结合当前仓库源码说明这些能力在今天astropy.io.fits中的具体落点。读完本文你将理解 FITS 生态中许多关键 API 与配置项为何长成现在这个样子也能为迁移旧 PyFITS 代码提供直接依据。一、背景PyFITS 与 astropy.io.fits 的渊源在并入 Astropy 之前astropy.io.fits是一个名为PyFITS的独立包。PyFITS 不再单独维护其后续开发全部并入 Astropy本文档记录的正是 PyFITS 在合并之前的全部发布历史。3.4.02016-01-29是 PyFITS 作为独立包的最后一个版本此后该功能以astropy.io.fits的形式在 Astropy 仓库中持续演进。从时间线上看PyFITS 的版本跨度长达十余年早期0.6.x ~ 0.9.x绑定 numarray 与 Python 21.x 时代转向 numpy2.x 时代补全压缩、校验和、uint 等 FITS 生态关键能力3.x 时代完成了 Header 接口重写、内存映射默认开启、验证选项细化等现代化改造。今天astropy.io.fits的大多数行为约定都能在这份历史中找到源头。二、版本时间线从 0.6.2 到 3.4.0 的关键里程碑版本发布日期核心意义0.6.22002-02-12首个有据可查的早期版本依赖 numarrayFITS 校验与 ASCII 表尚在路线图中0.8.02003-08-19兼容 numarray 0.6支持 complex 列memmap 对象随 HDUList 关闭0.9 / 0.9.3 / 0.9.62004支持变长数组表VLA、ASCII 表扩展、Random Groups、CONTINUE 卡、X 格式位标志列、图片分区读取1.02005-11-01支持 HIERARCH 约定新增 getheader/getdata/getval/writeto/append/update/info 等模块级便利函数1.12007-06-15兼容 numpy 或 numarray新增 StreamingHDU 流式写入1.32008-02-22支持从 numpy.ndarray 直接创建二进制表 HDU引入 output_verify 参数与 VerifyError1.42008-07-07支持文件对象/类文件对象完整支持 WCS 畸变论文定义的 record-valued 关键字卡RVKC2.02009-01-30初步支持 Tiled Image Compression 约定新增 setval/delvaluint16 支持2.12009-04-14新增 tdump/tcreate后更名 tabledump/tableloadEXTNAME 大小写敏感开关SIMPLEF 与非标准扩展支持2.22009-09-23支持 FITS 校验和CHECKSUM/DATASUM约定HDUList.insert2.32010-05-11完整支持 uint8/16/32/64 伪无符号整数表数据可直接按列名索引2.4.02011-01-10校验和完全符合 FITS 标准do_not_scale_image_data、disable_image_compression 参数3.0.02011-08-23大规模重构基本支持 Python 3TDIMn 多维列零宽二进制表字段3.12012-08-08Header 类彻底重写废弃 CardListmemmap 默认开启新增 fitsdiff 与 pyfits.diff 模块3.22013-11-26重写基于 CFITSIO 的瓦片压缩后端支持 Q 格式4 GB 变长数组ZQUANTIZ/ZDITHER0 量化抖动3.3.02014-07-17新增 fixwarn 等组合验证选项统一 Python 2.5~3.4 代码基系统性移除一批废弃 API3.4.02016-01-29PyFITS 最后一个独立版本从源码结构看这些里程碑的痕迹至今仍保留在 astropy/io/fits 包中card.py、header.py、column.py、fitsrec.py、convenience.py、verify.py、diff.py、hdu/含compressed、groups等子模块分别对应历史上各阶段沉淀下来的实现。三、主题演进深挖3.1 Header 接口的彻底重写3.1 里程碑PyFITS 3.1 对Header类做了一次近乎完全的重写核心目标是把原先埋在CardList里的操作能力全部收归Header本身并让Header成为一个可像 dict/OrderedDict 一样使用的有序映射。这次重写确立的接口约定正是今天astropy.io.fits的 Header 行为完整实现 dict 接口header[NAXIS] 2即可新增或更新关键字旧接口中必须用Header.update。值与注释同时赋值header[NAXIS] (2, Number of axes)。指定插入位置header.set(NAXIS, 2, Number of axes, afterBITPIX)Header.set取代旧的Header.update用法Header.insert()还支持以关键字名定位插入点及after参数3.2.1 补齐。直接访问卡对象Header.cards取代Header.ascardlist()/Header.ascardCard对象可与(keyword, value, comment)元组互换使用。注释访问header.comments[NAXIS]可查看与修改注释。重复关键字允许(HISTORY, 0)形式的(keyword, index)元组访问与删除重复卡普通关键字查找恒返回第一个副本而 COMMENT/HISTORY 等注解性关键字返回有序序列。通配符与切片header[NAXIS*]与切片均返回一个新的Header旧版返回CardList。比较与拼接两个 Header 可做严格相等比较可用运算符拼接等价于Header.extend。新版接口的诸多细节可以对照 header_transition.rst 这篇随 PyFITS 3.1 发布、至今仍收录在仓库中的过渡指南以及当前 header.py 中set、insert、rename_keyword、fromtextfile/totextfile、通配符匹配_wildcardmatch等方法的实现。3.2 校验Verification选项的演化PyFITS 3.3.0 为可修复错误与不可修复错误的处理引入了更细粒度的报告控制新增了六种组合选项fixignore、fixwarn、fixexceptionsilentfixignore、silentfixwarn、silentfixexception这些选项至今仍定义在 verify.py 的VERIFY_OPTIONS列表中语义在_Verify.run_option与verify中实现fix/silentfix决定是否执行修复ignore/warn/exception决定不可修复错误的报告方式单独的fix/silentfix保持旧默认行为对不可修复错误抛VerifyError。output_verify参数在 hdulist.py 的fitsopen签名中接受fix、silentfix、ignore、warn、exception及上述任意组合。与之相关的默认行为变化同样值得注意PyFITS 0.9 确立了输入宽松、输出严格的默认策略3.0.4 起写文件默认以fix模式验证输出自动修正常见格式错误而非抛异常。另外3.1 起pyfits.open()的checksum参数接受remove值用于忽略并移除文件中的 CHECKSUM/DATASUM2.2/2.4 逐步让校验和读写符合 FITS 标准并配套了fitscheck命令行工具。3.3 表Table读写能力的演进表处理是 PyFITS 迭代最密集的领域之一能力逐步累积为今天的完整形态建表 APIpyfits.new_table在 3.2 被标记 pending deprecation3.3 完全废弃官方推荐改用BinTableHDU.from_columns二进制表与TableHDU.from_columnsASCII 表FITS_rec.from_columns见 fitsrec.py则用于直接构造 FITS 兼容的 recarray。列格式支持 Q 格式64 位描述符的变长数组单表可变长数据可超 4 GB、P 格式变长数组、TDIMn 多维列3.0、X 格式位标志列0.9.3用户侧以布尔数组呈现、零宽字段3.0、complex 列0.8Column与ColDefs自 3.2 起新增.dtype属性直接给出 numpy dtype。数据访问2.3 起FITS_rec[columnName]与table.field(columnName)等价并返回 ndarrayFITS_record行对象支持完整切片、元组/列表赋值变长数组列可由 list 构造Column数组支持广播赋值3.2.1 修复。ASCII 表0.9.6 支持写 ASCII 表扩展字符串填充区分二进制表0 字节与 ASCII 表空格的差异在 3.0 修复缺省字符串列值由0.0改为空字符串3.2。dump/loadpyfits.tdump/tcreate与BinTableHDU.tdump/tcreate分别更名为pyfits.tabledump/tableload与BinTableHDU.dump/load3.1新格式为每个值加引号兼容旧 dump 但解析更健壮这些函数在 convenience.py 中仍可找到tabledump、tableload。数据完整性修复3.1.2/3.1.3 修复变长数组列 TFORMn 关键字漏写最大数组长度参数的问题堆heap大小计算错误导致写坏文件的问题在 3.2.1 修复布尔字段建表全变False、整型数组错配浮点列等边界问题在 3.1.2 修复。3.4 图像压缩从瓦片压缩到量化抖动压缩能力是这条历史线中最具技术含量的部分2.0 初步支持引入 Tiled Image Compression 约定将 n 维图像划分为矩形瓦片每片作为连续数据块压缩后存入二进制表的变长数组列支持 GZIP、RICE、H-Compress、IRAF 像素列表PLIO四种算法CompImageHDU的构造函数签名包含compressionType默认RICE_1、tileSize默认每行一片、hcompScale、hcompSmooth、quantizeLevel压缩图像 HDU 在用户侧表现得与普通图像 HDU 一致。3.2 重写后端改为使用标准 CFITSIO随包内置 v3.35支持 Tiled Image Convention v2.3系统打包者可改用系统版 CFITSIO低于 3.28 未测试新增 ZQUANTIZ 与 ZDITHER0 关键字支持——quantize_method可设为SUBTRACTIVE_DITHER_1/SUBTRACTIVE_DITHER_2dither_seed支持手动指定、系统时钟或基于校验和的自动生成GZIP 可无损压缩瓦片压缩图像可通过 Q 格式突破 4 GB 上限。校验和分工压缩图像 HDU 中ZHECKSUM/ZDATASUM覆盖原始图像 HDUCHECKSUM/DATASUM覆盖压缩图像 HDU3.2.1 修复。今日实现当前 compressed.py 中CompImageHDU.__init__的参数compression_type、quantize_level、quantize_method、dither_seed、do_not_scale_image_data、uint、scale_back正是上述历史的直接延续_quantization.py 中的DITHER_METHODS映射NO_DITHER、SUBTRACTIVE_DITHER_1、SUBTRACTIVE_DITHER_2与文档描述一一对应。3.5 内存映射与文件 I/O 的演进memmap 默认开启3.1 起pyfits.open()默认memmapTrue并提供全局开关pyfits.USE_MEMMAP与环境变量PYFITS_USE_MEMMAP控制默认行为这一开关如今沉淀为init.py 中Conf.use_memmap配置项。模式语义3.0.5 明确readonly在 memmap 下等价于copyonwrite内存中可改、不落盘并新增denywrite模式用于拒绝任何数据修改。文件对象支持1.4 起所有便利函数与类方法既接受文件名也接受文件对象StringIO、GzipFile 等3.0.4 起 gzip/zip 压缩的 FITS 文件可无视扩展名被自动识别打开1.1 的 StreamingHDU 允许不将整幅图像载入内存而流式写入扩展3.0.6 修正ostream模式以wb打开底层文件。今日参数fitsopen中的memmap、lazy_load_hdus1.3 加入的惰性 HDU 加载、cache、decompress_in_memory6.0 加入等参数共同定义了今天的文件打开行为详见 hdulist.py 的fitsopen签名。3.6 伪无符号整数与图像数据缩放FITS 标准用BZERO/BSCALE表示伪无符号整数例如int16数据配BZERO32768、BSCALE1即代表uint16。PyFITS 2.0 支持uint16选项2.3 扩展为 uint8/16/32/64 全套3.2 起uintTrue成为打开文件的默认参数之一。相关配套能力包括do_not_scale_image_dataTrue读取时不自动应用 BSCALE/BZERO2.4 加入适合仅想改头部信息、避免数据被重写成浮点的场景scale_backTrue保存时按原始 BITPIX 与 BSCALE/BZERO 还原数据3.1 加入等价于在 flush 前调用hdu.scale(type, old)save_backupTrueupdate/append 模式下在 flush 前自动备份原始文件3.1 加入备份名依次为.bak、.bak.1…ImageHDU.scale()方法支持optionold恢复原 BSCALE/BZERO与optionminmax按数据范围适配整型等缩放方案其optionold在 3.1 曾一度失效并被修复。3.7 便利函数convenience functions的沉淀模块级便利函数自 1.0 起成为 PyFITS 的标志性 API今天全部保留在 convenience.py 中getheader、getdata、getval、writeto、append、update、info以及 2.0 新增的setval、delval。2.4 还加入了 HDU 级方法update_ext_name/update_ext_version更新 EXTNAME/EXTVER、filebytes计算该 HDU 写入文件所占字节数、HDUList.fileinfo()返回 HDU 在文件中的头/数据位置字典与HDUList.filename()2.3。2.4 的append还新增verifyFalse参数跳过对既有文件的校验以大幅加快向大文件追加的速度。3.8 头关键字能力HIERARCH、RVKC 与通配符匹配HIERARCH 约定1.0 加入2.4 将 HIERARCH 卡关键字加值总长度上限由 68 放宽到 69 字符3.1.2 修复 HIERARCH 解析中缺空格、前导空格、小写关键字被误判为非法等问题。Record-valued 关键字卡RVKC1.4 依据 FITS WCS 畸变论文引入。其语法为keyword field-specifier: floatfield-specifier 由field与field.index构成可多层嵌套如DP1.AUX.1.COEFF.0关键字不区分大小写而 field-specifier 区分。文档给出了完整示例与三种访问方式按卡索引返回整串字符串、按纯关键字返回该关键字最低索引卡的整串值、按keyword.field返回浮点值并支持*任意零或多个字符、?单字符、...跨层级匹配仅可置于末尾三种模式匹配键。旧版以CardList承载匹配结果3.1 后废弃CardList今天的enable_record_valued_keyword_cards配置项init.py 中的Conf控制该特性开关。通配符扩展3.3 起header[DATE*]可匹配关键字中的连字符及任意字符而不再局限于[0-9A-Za-z_]以兼容 HIERARCH 与 RVKC 中更宽泛的合法字符集合。CONTINUE 卡0.9 支持读写3.1.2 修复 Python 2 下从字节串/Unicode 字符串创建 CONTINUE 卡的不一致长注解卡HISTORY/COMMENT不再拆入 CONTINUE 卡而是拆成多条注解卡3.0.4 修复。当前 card.py 中的Card.fromstring、Card.normalize_keyword、Card.is_blank3.3 新增判断完全空白卡等成员正是这些能力的延续。3.9 关键行为变化与代表性修复废弃警告策略3.3 起废弃 API 警告默认总是显示与 Astropy 同步脚本中可用pyfits.ignore_deprecation_warnings()关闭0.8/1.0 时代建议以python -Wd运行以查看被忽略的 DeprecationWarning。Header 值合法性3.1.3 起禁止将 NaN/Inf 浮点值写入头FITS 标准未定义其表示布尔值与数值的替换在 3.2.1 修复True可替换为整数 1数值类型可上下转型如0换为0.0。空白处理3.1 起头部字符串值按 FITS 标准自动去除尾随空格全局配置fits.STRIP_HEADER_WHITESPACE可关闭该行为对应今天的Conf.strip_header_whitespace为兼容 IRAFWATj_nnn约定需要逐字保留空白时可临时关闭。扩展名大小写2.1 提供setExtensionNameCaseSensitive3.1 以全局变量pyfits.EXTENSION_NAME_CASE_SENSITIVE取代对应今天的Conf.extension_name_case_sensitive2.4 起 EXTNAME/EXTVER 允许出现在 PRIMARY HDU 中并反映到.name属性与pyfits.info()。非标准文件2.1 支持SIMPLEF文件读作_NonstandardHDU与未知 XTENSION 值扩展_NonstandardExtHDU2.2 提供ignore_missing_endTrue以容忍缺失 END 卡的坏文件3.0.2 起零基索引C/Python 惯例在文档与警告中明确说明以区别于 FORTRAN 惯例。FitsHDU3.1 支持将整个 FITS 文件嵌入另一文件数据区FitsHDU.fromhdulist()生成嵌入 HDUList 的新 FitsHDU配套的HDUList.fromstring可从内存中的字节缓冲解析出完整 HDUList3.1修复自 3.0 起_BaseHDU.fromstring的缺陷。平台与稳定性多年间修复了大量 OSX 大文件截断2^32 字节、Windows mmap 崩溃、GNU Hurd 无 mmap flush、Solaris GZIP 压缩总线错误、内存泄漏与并发写文件竞态mktemp等问题3.2 重排了 OS 文件模式与 PyFITS 内部模式的映射使已打开的类文件对象只需具备相应读写能力即可使用。工具链3.1 新增pyfits.diff模块FITSDiff、HeaderDiff等与fitsdiff程序3.1.2 起通过 console_scripts 入口点安装fitsdiff/fitscheck改善 Windows 支持。3.10 PyFITS 3.3 移除与废弃的 API 清单3.3.0 声明这是最后一个支持以下自 v3.1 起标记废弃的 API 的版本3.3.x 补丁版仍保留对迁移旧代码具有直接的清单价值废弃 API替代方案CardList类旧 header 实现的组成部分已被Header吸收Card.keyCard.keywordCard.cardimage/Card.ascardimageCard.image或str(card)create_card工厂函数直接使用Card构造函数create_card_from_string工厂函数Card.fromstringupper_key函数Card.normalize_keywordHeader.update(keyword, value, comment)用法Header.setHeader.update仅保留 dict 语义Header.ascardHeader.cardsHeader.rename_keyHeader.rename_keywordHeader.get_historyheader[HISTORY]Header.get_commentheader[COMMENT]Header.toTxtFile/Header.fromTxtFileHeader.totextfile/Header.fromtextfilepyfits.tdump/tcreatepyfits.tabledump/tableloadBinTableHDU.tdump/tcreateBinTableHDU.dump/loadHeader构造函数的txtfile参数Header.fromfileFITS_record构造函数的startColumn/endColumnstart/end3.0 已改此外3.2 移除了createCard、createCardFromString、upperKey、ColDefs.data、setExtensionNameCaseSensitive、_File.getfile、_TableBaseHDU.get_coldefs、Header.has_key、Header.ascardlist等旧接口并将CompDataHDU的updateHeader系列方法、compData属性及 HDU 内部属性_hdrLoc/_datLoc/_datSpan更名_header_offset/_data_offset/_data_size标记为 pending deprecation。Card的is_blank属性则于 3.3 新增用于判断完全空白的卡。四、面向迁移者的实用建议如果你手头还有以pyfits命名的旧代码官方历史文档给出的迁移路径可以总结为先摸清废弃面以python -Wd运行脚本让所有 DeprecationWarning 显式输出逐一对照上文 API 清单替换。Header 操作把Header.has_key(k)换成k in header把Header.update(keyword, value, comment)换成Header.set或直接下标赋值header[NAXIS] (2, Number of axes)把header.ascard/ascardlist()换成header.cards。删除语义旧版del header[keyword]对不存在的关键字静默无操作新接口会告警且未来会抛KeyError建议先if keyword in header:判断或用try/except KeyError包裹。表建表把pyfits.new_table(coldefs, nrowsN)改为BinTableHDU.from_columns(coldefs, nrowsN)二进制表或TableHDU.from_columns(...)ASCII 表两者参数兼容。展示行为交互环境中直接输入headerrepr即按 FITS 文件格式逐卡换行显示print(header)str返回的是无换行的文件字面量。详细对照可查阅仓库中的 header_transition.rst。五、从历史看今日能力落点速查将历史功能映射到当前astropy.io.fits的源码位置便于进一步深入全局配置Conf类init.py集中了enable_record_valued_keyword_cards、extension_name_case_sensitive、strip_header_whitespace、use_memmap、lazy_load_hdus、enable_uint六个配置项——它们分别对应历史上 RVKC、EXTNAME 大小写、头空白处理、内存映射、惰性加载与伪无符号整数的反复打磨。打开文件fitsopenhdulist.py的mode、memmap、save_backup、uint、checksum、disable_image_compression、do_not_scale_image_data、scale_back、output_verify、ignore_missing_end、lazy_load_hdus、use_fsspec、decompress_in_memory等参数几乎完整承载了 2.x~6.x 的功能演进。验证机制VERIFY_OPTIONS与_Verifyverify.py实现全部验证选项的解析与报告语义。压缩与量化CompImageHDUcompressed.py与DITHER_METHODS、Quantize_quantization.py。表数据FITS_rec/FITS_record与from_columnsfitsrec.py配合Column/ColDefscolumn.py。便利函数getheader、getdata、getval、setval、delval、writeto、append、update、info、tabledump、tableload等convenience.py。Header 与 Cardheader.py 与 card.py。结语PyFITS 十余年的版本历史本质上是围绕 FITS 标准的一次次对齐与补全从 numarray 时代的奠基到 numpy 时代的重写再到 3.x 时代对 Header 接口、验证语义、内存映射与瓦片压缩的现代化。这些决策至今仍以配置项、函数签名与类接口的形式活在astropy.io.fits中。对于希望在读写 FITS 文件时理解为什么是这个行为、以及需要从旧 PyFITS 代码迁移的开发者而言history.rst 与 header_transition.rst 两份附录是最权威的第一手资料配合上述源码路径即可完成从历史约定到当前实现的完整对照。赞分享科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载相关推荐Astropy FITS Header 接口演进全解从 PyFITS 3.1 到现代 astropy.io.fits 的过渡迁移指南Astropy FITS Header 接口演进全解从 PyFITS 3.1 到现代 astropy.io.fits 的过渡迁移指南 导读 FITSFlex科学计算科研数据分析scan4all 项目内嵌 quic-go 演进史从 QUIC draft-23 到 RFC 9000 的版本变更与技术沉淀scan4all 项目内嵌 quic go 演进史从 QUIC draft 23 到 RFC 9000 的版本变更与技术沉淀 本篇技术指南以 scan4all网络安全漏洞扫描渗透测试应用安全如何使用pwgen-for-bios快速破解常见BIOS密码初学者必备教程如何使用pwgen for bios快速破解常见BIOS密码初学者必备教程 BIOS密码遗忘是许多电脑用户面临的常见问题而pwgen for bios作为一前端密码学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考