关闭上下文管理器后保持适合文件的可访问性
Posted
技术标签:
【中文标题】关闭上下文管理器后保持适合文件的可访问性【英文标题】:Keeping fits files accessibles after closing context manager 【发布时间】:2022-01-20 13:32:03 【问题描述】:我正在使用astropy.io.fits
(fits 文件格式)打开托管在某个 repo 上的 fit 文件,如下所示:
for url in self.urllist:
with fits.open(url) as f:
l.info(f"Loading file at url")
self.hdu_cal.append(f[1])
基本上,我想记住其中的一些。但是,一旦我离开上下文管理器,数据就会变得不可用,因为文件会关闭。
有什么方法可以制作副本并确保我将数据保存在内存中?
【问题讨论】:
如果您希望对象保持活动状态,请不要使用上下文管理器。 oups。我现在因为没有看到这一点而感到有点愚蠢。 也许可以多说一点你想做的事情。您需要标题还是只需要数据,您打算如何处理它们?我同意 Barmar 的观点,如果您想自己管理打开的文件,就不能使用上下文管理器。无论如何,仅仅阅读它并不是很重要。 @Iguananaut 好吧,我认为这个问题已经很清楚了。无论如何,我可能确实不需要 CM。虽然我不同意阅读它不是很重要,但重点更多的是关于垃圾收集,如果我将大量这些文件读入内存但对这些对象的引用仍然存在,最终会耗尽内存...... 【参考方案1】:您可以列出对象的内容:
all_fits =
for url in self.urllist:
with fits.open(url) as f:
l.info(f"Loading file at url")
all_fits[url] = list(f)
self.hdu_cal.append(f[1])
【讨论】:
由于各种原因,这行不通。以上是关于关闭上下文管理器后保持适合文件的可访问性的主要内容,如果未能解决你的问题,请参考以下文章
如何在其 isAccessibilityElement = false 时禁用元素的可访问性焦点