在我们的实验室中,我们通过python包hdf5
将数据存储在h5py
个文件中。
在实验开始时,我们在文件中的数据数组(以及其他内容)之后创建一个hdf5
文件并存储数组。当实验失败或被中断时,文件未正确关闭。
因为我们的实验从iPython
运行,所以对数据对象的引用仍然(在某处)存储在内存中。
有没有办法扫描所有打开的h5py数据对象并关闭它们?
答案 0 :(得分:15)
这是怎么做的(我无法弄清楚如何在没有例外的情况下检查文件的封闭性,也许你会发现):
import gc
for obj in gc.get_objects(): # Browse through ALL objects
if isinstance(obj, h5py.File): # Just HDF5 files
try:
obj.close()
except:
pass # Was already closed
另一个想法:
根据 使用这些文件,使用上下文管理器和with
这样的关键字怎么样?
with h5py.File("some_path.h5") as f:
f["data1"] = some_data
当程序流退出with-block时,无论发生什么情况,文件都会关闭,包括异常等。
答案 1 :(得分:1)
pytables
(h5py
使用)跟踪所有打开的文件,并提供一种简单的方法来强制关闭所有打开的hdf5
文件。
import tables
tables.file._open_files.close_all()
该属性_open_files
还有一些有用的方法,可为您提供有关打开文件的信息和处理程序。
答案 2 :(得分:1)
我发现hFile。 bool ()如果打开则返回True,否则返回False。这可能是最简单的检查方法。 换句话说,执行以下操作:
hFile = h5py.File(path_to_file)
if hFile.__bool__():
hFile.close()