You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量读取多扩展.fits文件触发OSError报错的问题咨询

报错原因

问题出在循环内的传参错误,和你的fits文件本身无关,不需要上传测试文件。

  • glob.glob()返回的是所有匹配到的文件路径组成的列表,也就是你代码里的imgs变量是个路径列表,不是单个路径。
  • 你写for循环时定义了遍历变量location代表列表里的单个文件路径,但调用fits.open()的时候传入的是整个列表imgs,不是当前遍历到的单个路径location。
    astropy.io.fits.open()接收到列表类型输入时,不会自动遍历列表批量读文件,反而会把输入判定为待操作的类文件流对象。Python列表本身没有write方法,不符合流对象的要求,就触发了你看到的OSError。
    你单文件测试时传的是字符串路径,参数类型符合预期,所以能正常运行。
修复方法

把fits.open()的入参改成循环遍历得到的单个路径变量即可,修正后的基础代码:

imgs = sorted(glob.glob('location_of_the_files/*.fits'))

for location in imgs:   
    hdul = fits.open(location)  # 此处替换为单个路径变量location
    original = hdul[1].data
    model = hdul[2].data
    residual = hdul[3].data
    # 处理完数据记得关闭文件句柄
    hdul.close()

更推荐用上下文管理器写法,不需要手动调用close(),退出代码块时会自动释放文件资源,避免句柄泄漏:

imgs = sorted(glob.glob('location_of_the_files/*.fits'))

for location in imgs:   
    with fits.open(location) as hdul:
        original = hdul[1].data
        model = hdul[2].data
        residual = hdul[3].data
        # 在此处编写针对当前文件三个数据块的处理逻辑即可

内容的提问来源于stack exchange,提问作者user16454053

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:31:12