你如何在 python 列表理解中关闭文件?

bla*_*kbk 2 python list h5py

我试图从许多 HDF5 文件中提取值并存储在列表中。

import h5py
h = [h5py.File('filenum_%s.h5' % (n),'r')['key'][10][10] for n in range(100)]
Run Code Online (Sandbox Code Playgroud)

此列表推导式包含来自 HDF5 文件filenum0.h5- 'key' 数组中网格点 (10, 10) 处的值filenum99.h5

它可以工作,除了它在第 50 个元素附近停止并出现错误:
IOError: unable to open file (File accessibilty: Unable to open file)
即使我知道该文件存在并且如果我没有打开许多其他文件也可以打开它。我想我收到错误是因为打开了太多文件。

有没有办法关闭此列表理解中的文件?或者,有没有更有效的方法来构建我想要的列表?

Jea*_*bre 5

通过像你正在做的那样,你无法控制文件何时关闭。

您可以控制它,但不能使用单线。您需要一个返回数据并关闭文件的辅助方法(使用上下文管理器更好,因为h5py文件支持它,我刚刚检查过)

def get_data(n):
    with h5py.File('filenum_%s.h5' % (n),'r') as f:
        return f['key'][10][10]
Run Code Online (Sandbox Code Playgroud)

然后

h = [get_data(n) for n in range(100)]
Run Code Online (Sandbox Code Playgroud)

当然,您可以get_data通过不硬编码 10 & 'key' 参数来使函数更通用。