我试图加载到内存中的几个2 000 FITS利用astropy.io.fits
:OSERROR 24(打开的文件太多)阅读一堆FITS当与astropy.io
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'行。 –
如果你使用'data.copy()',那么你将整个数据加载到内存中,所以你可以用'memmap = False'打开文件,然后就没有问题了。 此外,如果数据由表格组成,则存在一个问题,现在已修复,导致资源泄漏。 – Iguananaut
@Iguananaut,绝对购买'memmap = False'。我应该仔细阅读“open”文档...... –