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

时间:2015-07-08 08:47:58

标签: python corruption h5py

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

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

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

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

关闭文件
measurement_data.close()

不幸的是,不时发生这种情况,交互式会话结束时没有明确关闭文件(意外杀死会话,停电,因某些其他软件导致操作系统崩溃)。这总是会导致文件损坏并丢失完整数据。当我尝试打开它时,我收到错误:

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

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

  1. 有没有办法避免损坏的文件,即使它没有明确关闭?我已经阅读了有关使用with语句here的信息,但是当会话意外结束时,我不确定这是否会有所帮助。
  2. 我能以某种方式恢复损坏文件中的数据吗?有修理计划吗?
  3. 总是打开和关闭文件,因为每次写入访问都对我不利,因为我不断地从许多不同的函数和线程中写入数据。所以我对另一种解决方案更满意。

2 个答案:

答案 0 :(得分:4)

HDF5设计人员知道腐败问题。他们正在努力通过adding journalling在版本1.10中修复此问题。与此同时,您可以定期调用flush()以确保您的写入已被刷新,这应该可以最大限度地减少一些损害。您也可以尝试使用external links,它允许您将数据存储在单独的文件中,但在阅读时将它们链接在一起。

答案 1 :(得分:2)

在例如文件中没有任何内容可以防止文件被破坏停电。你所能做的就是尽量减少伤害。一种方法是使用冗余。您使用两个文件而不是一个文件,其中只有一个文件随时打开。假设文件1已打开,您将所有更改写入文件1.在写入一定时间或一定数量的数据后,关闭它,从文件1更新文件2,然后继续写入文件2,依此类推。