首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭打开的h5py数据文件

关闭打开的h5py数据文件
EN

Stack Overflow用户
提问于 2015-04-25 17:22:34
回答 3查看 24.2K关注 0票数 21

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

在实验开始时,我们创建一个hdf5文件,并将数组一个接一个地存储在文件中的数据数组中(以及其他内容)。当实验失败或被中断时,文件不会正确关闭。因为我们的实验是从iPython运行的,所以对数据对象的引用保留在内存中(某处)。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-26 01:55:11

这就是它是如何做到的(我不知道如何检查文件的封闭性而没有异常,也许你会发现):

代码语言:javascript
复制
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关键字呢?

代码语言:javascript
复制
with h5py.File("some_path.h5") as f:
   f["data1"] = some_data

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

票数 23
EN

Stack Overflow用户

发布于 2019-06-17 11:11:21

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

代码语言:javascript
复制
import tables
tables.file._open_files.close_all()

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

票数 9
EN

Stack Overflow用户

发布于 2019-09-09 12:27:13

我发现hFile。bool()如果打开则返回True,否则返回False。这可能是最简单的检查方法。换句话说,这样做:

代码语言:javascript
复制
hFile = h5py.File(path_to_file)
if hFile.__bool__():
       hFile.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29863342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档