编程语言
首页 > 编程语言> > python – 使用astropy.io读取一堆FITS时的OSError 24(打开的文件太多)

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

作者:互联网

我正在尝试使用astropy.io.fits将几千个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]打开太多
文件被引发.

我有同样的问题:

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,fits
来源: https://codeday.me/bug/20190609/1202966.html