关闭一个打开的 h5py 数据文件
Close an open h5py data file
在我们的实验室中,我们通过 python 包 h5py
.
将数据存储在 hdf5
文件中
在实验开始时,我们创建一个 hdf5
文件并在文件中存储数据数组后的数组(除其他外)。当实验失败或中断时,文件未正确关闭。
因为我们的实验 运行 来自 iPython
,所以对数据对象的引用仍然(某处)在内存中。
有没有办法扫描所有打开的 h5py 数据对象并关闭它们?
这是如何完成的(我不知道如何无例外地检查文件的封闭性,也许你会发现):
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-block时,无论发生什么情况,包括异常等,文件都会关闭
pytables
(h5py
使用)跟踪所有打开的文件并提供一种简单的方法 force-close 所有打开的 hdf5
文件。
import tables
tables.file._open_files.close_all()
该属性 _open_files
也有一些有用的方法可以为您提供打开文件的信息和处理程序。
我发现 hFile.bool() returns 如果打开则为真,否则为假。这可能是最简单的检查方法。
换句话说,这样做:
hFile = h5py.File(path_to_file)
if hFile.__bool__():
hFile.close()
在我们的实验室中,我们通过 python 包 h5py
.
hdf5
文件中
在实验开始时,我们创建一个 hdf5
文件并在文件中存储数据数组后的数组(除其他外)。当实验失败或中断时,文件未正确关闭。
因为我们的实验 运行 来自 iPython
,所以对数据对象的引用仍然(某处)在内存中。
有没有办法扫描所有打开的 h5py 数据对象并关闭它们?
这是如何完成的(我不知道如何无例外地检查文件的封闭性,也许你会发现):
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-block时,无论发生什么情况,包括异常等,文件都会关闭
pytables
(h5py
使用)跟踪所有打开的文件并提供一种简单的方法 force-close 所有打开的 hdf5
文件。
import tables
tables.file._open_files.close_all()
该属性 _open_files
也有一些有用的方法可以为您提供打开文件的信息和处理程序。
我发现 hFile.bool() returns 如果打开则为真,否则为假。这可能是最简单的检查方法。 换句话说,这样做:
hFile = h5py.File(path_to_file)
if hFile.__bool__():
hFile.close()