创建 HDF5 文件时损坏文件而不关闭它们 (h5py)

eri*_*rik 6 python corruption h5py

我正在使用 h5py 将实验数据存储在 HDF5 容器中。

在交互式会话中,我使用以下命令打开文件:

measurement_data = h5py.File('example.hdf5', 'a')
Run Code Online (Sandbox Code Playgroud)

然后我使用一些自己编写的函数将数据写入文件(可以是几天实验中的许多 GB 数据)。在实验结束时,我通常会使用

measurement_data.close()
Run Code Online (Sandbox Code Playgroud)

不幸的是,有时会发生交互式会话在没有我明确关闭文件的情况下结束(意外终止会话、断电、由于某些其他软件导致操作系统崩溃)。这总是会导致文件损坏和完整数据丢失。当我尝试打开它时,出现错误:

OSError: Unable to open file (File signature not found)
Run Code Online (Sandbox Code Playgroud)

我也无法在 HDFview 或我尝试过的任何其他软件中打开该文件。

  1. 即使文件没有明确关闭,有没有办法避免损坏的文件?我在此处阅读了有关使用 with 语句的信息,但是当会话意外结束时,我不确定这是否会有所帮助。
  2. 我可以以某种方式恢复损坏文件中的数据吗?有维修程序吗?

每次写访问时总是打开和关闭文件对我来说听起来很不利,因为我不断地从许多不同的函数和线程写入数据。所以我会更满意不同的解决方案。

cht*_*mon 5

HDF5 设计人员知道损坏问题。他们正在通过添加 journalling在 1.10 版中解决这个问题。与此同时,您可以flush()定期调用以确保您的写入已被刷新,这应该可以最大限度地减少一些损害。您还可以尝试使用外部链接,这将允许您将数据片段存储在单独的文件中,但在您阅读它们时将它们链接到一个结构中。

  • 显然他们已经从 1.10 版本中删除了日志:https://hdfgroup.org/wp/2015/05/whats-coming-in-the-hdf5-1-10-0-release/ (3认同)