如何关闭python列表中的文件?
我试图从许多HDF5文件中提取值并存储在列表中如何关闭python列表中的文件?,python,list,h5py,Python,List,H5py,我试图从许多HDF5文件中提取值并存储在列表中 import h5py h = [h5py.File('filenum_%s.h5' % (n),'r')['key'][10][10] for n in range(100)] 此列表包含HDF5文件filenum0.h5-filenum99.h5中“键”数组中网格点(10,10)处的值 它可以工作,只是在第50个元素附近停止,出现错误: IOError:无法打开文件(文件访问权限:无法打开文件) 即使我知道该文件存在,并且如果我没有打开许多其
import h5py
h = [h5py.File('filenum_%s.h5' % (n),'r')['key'][10][10] for n in range(100)]
此列表包含HDF5文件filenum0.h5
-filenum99.h5
中“键”数组中网格点(10,10)处的值
它可以工作,只是在第50个元素附近停止,出现错误:IOError:无法打开文件(文件访问权限:无法打开文件)
即使我知道该文件存在,并且如果我没有打开许多其他文件,也可以打开它。我想我是因为打开了太多文件而出错的 是否有方法关闭此列表中的文件?
或者,有没有更有效的方法来建立我想要的列表?像现在这样做,你无法控制文件何时关闭 你可以控制它,但不能用一个班轮。您需要一个辅助方法来返回数据并关闭文件(使用上下文管理器更好,因为
h5py
文件支持这一点,我刚刚检查过)
然后
当然,通过不硬编码10个&“key”参数,您可以使
get_data
函数更通用。为了参数,您可以在一个糟糕的列表理解中完成所有操作,如下所示:
import h5py
h = [(f['key'][10][10], f.close())[0]
for f in (h5py.File('filenum_%s.h5' % (n),'r') for n in range(100))]
但我强烈建议不要这样做,而应该使用辅助函数或其他方法。如果不行,最好使用传统的循环。请看这篇文章,实际上不应该这样做,不应该在理解中执行可变操作。可能您忘记在函数中返回结果了?是否
h5py.File()
不支持上下文管理器接口?是否,是的。。。对不起,没有返回结果,我的错!!你不需要中间的结果
变量,因为你可以简单地返回f['key'][10][10]
,而和将适当地处理这个问题。这是正确的(保留旧式方法)。是的,因为不建议为副作用构建对象。但这很酷。pylang链接答案也是一个很好的线索:
h = [get_data(n) for n in range(100)]
import h5py
h = [(f['key'][10][10], f.close())[0]
for f in (h5py.File('filenum_%s.h5' % (n),'r') for n in range(100))]