批量读取多扩展.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
相关产品推荐
相关产品推荐

