关闭打开的h5py数据fi

2024-04-19 05:43:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在我们的实验室中,我们通过python包将数据存储在hdf5文件中。

在实验开始时,我们创建一个hdf5文件,并在文件中存储一个又一个数据数组(除其他外)。当实验失败或被中断时,文件无法正确关闭。 因为我们的实验是从iPython开始的,所以对数据对象的引用仍然(在某个地方)保留在内存中。

有没有办法扫描并关闭所有打开的h5py数据对象?


Tags: 文件数据对象内存地方ipython数组实验室
3条回答

这就是它的实现方式(我不知道如何毫无例外地检查文件的关闭状态,也许您会发现):

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

另一个想法:

Dpending如何使用文件,如何使用上下文管理器和像这样的with关键字?

with h5py.File("some_path.h5") as f:
   f["data1"] = some_data

当程序流退出with块时,无论发生什么,文件都将关闭,包括异常等

pytables(它使用h5py)跟踪所有打开的文件,并提供一个简单的方法来强制关闭所有打开的hdf5文件。

import tables
tables.file._open_files.close_all()

属性_open_files还提供了一些有用的方法,可以为打开的文件提供信息和处理程序。

我发现hFile.bool(如果打开)返回True,否则返回False。这可能是最简单的检查方法。 换言之,请执行以下操作:

hFile = h5py.File(path_to_file)
if hFile.__bool__():
       hFile.close()

相关问题 更多 >