【问题标题】: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。虽然我不同意阅读它不是很重要,但重点更多的是关于垃圾收集,如果我将大量这些文件读入内存但对这些对象的引用仍然存在,最终会耗尽内存......

标签: python with-statement astropy


【解决方案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])

【讨论】:

  • 由于各种原因,这行不通。
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 2021-01-28
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 2011-12-25
相关资源
最近更新 更多