我正在使用 h5py 将实验数据存储在 HDF5 容器中。
在交互式会话中,我使用以下命令打开文件:
measurement_data = h5py.File('example.hdf5', 'a')
然后我使用一些自写函数将数据写入文件(可以是几天实验中的许多 GB 数据)。在实验结束时,我通常会使用以下命令关闭文件
measurement_data.close()
不幸的是,有时会发生这样的情况:交互式会话在我没有明确关闭文件的情况下就结束了(意外终止会话、断电、由于某些其他软件而导致操作系统崩溃)。这总是会导致文件损坏和完整数据丢失。当我尝试打开它时,出现错误:
OSError: Unable to open file (File signature not found)
我也无法在 HDFview 或我尝试过的任何其他软件中打开该文件。
- 有没有办法避免文件损坏,即使它没有明确关闭?我读过有关使用 with 语句的内容here,但我不确定当会话意外结束时这是否有帮助。
- 我可以通过某种方式恢复损坏文件中的数据吗?有可用的修复程序吗?
每次写访问时总是打开和关闭文件听起来对我来说非常不利,因为我不断地从许多不同的函数和线程写入数据。所以我会对不同的解决方案感到更满意。
HDF5 设计者都知道损坏问题。他们正在努力在 1.10 版本中解决这个问题添加日记。同时您可以致电flush()
定期确保您的写入已被刷新,这应该可以最大程度地减少一些损坏。您也可以尝试使用外部链接这将允许您将数据片段存储在单独的文件中,但在读取它们时将它们链接到一个结构中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)