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


问题内容

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

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

measurement_data = h5py.File('example.hdf5', 'a')

然后,我使用一些自写函数将数据写入文件(几天的实验中可能会获得许多GB的数据)。在实验结束时,我通常会使用以下命令关闭文件

measurement_data.close()

不幸的是,有时会发生交互式会话,而无需我明确关闭文件即可结束(意外终止了该会话,断电,由于某些其他软件导致的OS崩溃)。这始终会导致文件损坏和完整数据丢失。当我尝试打开它时,出现错误:

OSError: Unable to open file (File signature not found)

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

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

总是为每次写访问打开和关闭文件对我来说是非常不利的,因为我不断地从许多不同的函数和线程中写入数据。因此,我会对其他解决方案感到满意。


问题答案:

HDF5设计人员知道损坏问题。他们正在通过添加journalling来修复1.10版中的此问题。在此期间,您可以flush()定期致电以确保您的写操作已被清空,这可以最大程度地减少部分损坏。您也可以尝试使用外部链接,该链接将使您可以将数据片段存储在单独的文件中,但在读取数据时将它们链接为一个结构。