我正在尝试使用 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 files
的错误。
我也遇到了同样的问题:
def readfits(filename):
ft = fits.open(filename) as ft:
data = ft[0].data
ft.close()
return data
我怀疑
astropy.io.fits
没有正确关闭文件。是否有办法强制关闭文件?
del
。我只是用data = ft[0].data.copy()
替换了data = ft[0].data
这一行。 - Arcturus Bdata.copy()
,那么整个数据都会被加载到内存中,因此最好使用memmap=False
直接打开文件,这样就不会有问题了。另外,如果数据包含表格,则曾经存在一个问题,现在已经修复,该问题导致资源泄漏。 - Iguananautmemmap=False
。我应该更仔细地阅读open
的文档... - Arcturus B