gpt4 book ai didi

python - 使用 astropy.io 读取一堆 FITS 时出现 OSError 24(打开的文件太多)

转载 作者:太空狗 更新时间:2023-10-30 01:07:10 25 4
gpt4 key购买 nike

我正在尝试使用 astropy.io.fits 将几个 2 000 FITS 加载到内存中:

def readfits(filename):
with fits.open(filename) as ft:
# the fits contain a single HDU
data = ft[0].data
return data

data_sci = []
for i in range(2000):
data_sci.append(readfits("filename_{}.fits".format(i)))

但是,当到达第 1015 个文件时,OSError: [Errno 24] Too many open
文件
被提出。

我有同样的问题:

def readfits(filename):
ft = fits.open(filename) as ft:
data = ft[0].data
ft.close()
return data

我怀疑 astropy.io.fits 没有正确关闭文件。有没有有什么方法可以强制关闭文件?

最佳答案

您的 readfits 函数实际上使文件句柄保持打开状态以保持对数据的访问,因为默认情况下它会创建一个 mmap到数据并且不会将其完全读入物理内存,如所解释的:http://astropy.readthedocs.org/en/latest/io/fits/appendix/faq.html#i-m-opening-many-fits-files-in-a-loop-and-getting-oserror-too-many-open-files

顺便说一下,如果您只想要一个从第一个 HDU 中读取数据的函数,那么它已经内置:http://docs.astropy.org/en/v1.0.5/io/fits/api/files.html#astropy.io.fits.getdata

没有必要重新发明轮子。

关于python - 使用 astropy.io 读取一堆 FITS 时出现 OSError 24(打开的文件太多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com