我正在尝试使用以下命令将一些 2000 FITS 加载到内存中astropy.io.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
files
被提出。
我有同样的问题:
def readfits(filename):
ft = fits.open(filename) as ft:
data = ft[0].data
ft.close()
return data
我怀疑astropy.io.fits
没有正确关闭文件。有没有
我可以强制关闭文件吗?
Your 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-打开文件
顺便说一句,如果您只想要一个从第一个 HDU 读取数据的函数,则该函数已经内置:http://docs.astropy.org/en/v1.0.5/io/fits/api/files.html#astropy.io.fits.getdata
没有必要重新发明轮子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)