Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何关闭python列表中的文件?_Python_List_H5py - Fatal编程技术网

如何关闭python列表中的文件?

如何关闭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:无法打开文件(文件访问权限:无法打开文件) 即使我知道该文件存在,并且如果我没有打开许多其

我试图从许多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:无法打开文件(文件访问权限:无法打开文件)

即使我知道该文件存在,并且如果我没有打开许多其他文件,也可以打开它。我想我是因为打开了太多文件而出错的

是否有方法关闭此列表中的文件?
或者,有没有更有效的方法来建立我想要的列表?

像现在这样做,你无法控制文件何时关闭

你可以控制它,但不能用一个班轮。您需要一个辅助方法来返回数据并关闭文件(使用上下文管理器更好,因为
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))]