【问题标题】:h5py clearing file consistency flagsh5py 清除文件一致性标志
【发布时间】:2019-05-01 13:57:20
【问题描述】:

我做了一些研究,并使用 h5py 模块将结果存储在 HDF5 文件中。我使用 h5py 模块和 HDF5 组的 HDF 视图工具多次打开并读取数据。这一切都很好,直到有一天我的电脑在 HDF 视图中打开文件时崩溃了。

重启电脑后,我无法再打开文件。 HDF 视图工具显示一般错误:“打开文件时出错”

我在 h5py 中编写了文件,所以我决定尝试使用它来读取数据。该文件以 swmr 模式编写,libver='latest'。我尝试了以下方法:

with h5py.File(fpath, 'r', swmr=True, libver='latest') as f:
    pass

返回错误“OSError: 无法打开文件(文件尚未打开以进行 SWMR 写入)”

with h5py.File(fpath, 'r') as f:
    pass

返回错误“OSError: Unable to open file (file is already open for write (may use h5clear file to clear file contrasts flags))”

现在我想知道,在 h5py 模块中实现了 h5clear 选项了吗?我在任何地方都找不到有关此的任何信息。

编辑:删除文件(抱歉)

【问题讨论】:

  • 关于 h5clear 选项,询问开发者是否已经实现。 h5py 用户论坛位于:groups.google.com/forum/#!forum/h5py
  • 确实,您的文件可能已损坏。您是否尝试过任何批处理程序来读取它(来自 HDFGroup 的 h5dump,或 PyTables 模块提供的 ptdump)?
  • 感谢您的回复,我在 HDF 论坛上发了一个帖子groups.google.com/forum/#!topic/h5py/zcyB2tNQ6Eo
  • 感谢您的建议。我目前正在尝试弄清楚如何在 Visual Studio 中使用 HDF 工具,因为不幸的是我的编程经验目前仅限于 Python
  • h5clear 命令未找到。我有hdf5 1.10.0-patch1。其他命令行工具如 h5dumph5repack 工作正常。有什么方法可以使用可用的实用程序清除或重置标志? (Ubuntu Bionic Beaver 顺便说一句)

标签: python h5py


【解决方案1】:

给定一个引发此错误的 hdf5 文件 Unable to open file (file is already open for write/SWMR write),您无法重新创建该文件,您可以使用命令行工具 h5clear 清除文件一致性标志。

$> h5clear -s my_bad.h5

获取h5clear 实用程序(在 Windows 10 或任何其他操作系统上)的一种方法是使用 Anaconda Python 发行版安装 h5py(或 pandas,不确定哪个负责)。在我的系统上,可执行文件位于环境 bin 目录中:anaconda3/envs/my_env/Library/bin/h5clear。我希望您也可以通过从 pip 安装 h5py 来获得此实用程序,尽管我尚未对此进行测试。

如果您安装了 Anaconda,您可以create an environment,安装软件包,然后使用命令行中的以下命令运行h5clear。在 Windows 上,我使用 git-bash,但如果您正确设置了路径,这也应该可以从 Anaconda 提示符甚至 Windows 命令提示符中工作。

$> conda create --name demo

$> source activate demo

(demo) 
$> conda install h5py pandas

(demo)
$> h5clear -s my_bad.h5

【讨论】:

  • 您是如何使用 pandas 或 h5py 清除 SWMR 标志的?我花了很长时间寻找这样的解决方案,并得出结论这是不可能的。我最终使用 hdf5 库(在 python 之外)从命令行清除了文件。
  • 在命令行中,我激活了安装了 pandas 和 h5py 的 Anaconda Python 环境。然后我可以访问命令行工具h5clear。因此,我从命令行获取了我在回复中列出的代码。
  • 当我这样做时,我的 conda 提示似乎只是调用了 HDF5 包(不是安装在 python 中的那个)
  • 您始终可以在命令行中指定特定的h5clear 可执行文件,方法是键入相对/绝对路径,或者转到h5clear 所在的文件夹并从那里运行它。作为第一个选项的示例,在 bash 环境中(例如 Windows 上的 git-bash),您可以运行 /c/Users/myself/AppData/Local/Continuum/anaconda3/envs/my_env/Library/bin/h5clear -s my_bad.h5。在命令提示符中,您将路径切换为 Windows 样式,否则它应该可以正常工作。
  • 是的,但正如我之前提到的那样,这并不是 python 中的真正解决方案,您需要下载实际的 HDF5 实用程序才能执行此操作。
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多