h5py清除文件一致性标志

6
我进行了一些研究,并使用h5py模块将结果存储在HDF5文件中。我多次使用h5py模块和来自HDF5组的HDF查看工具打开并读取数据,这一切都很正常,直到有一天我的电脑在HDF视图中打开文件时崩溃了。
重新启动计算机后,我无法再打开文件。 HDF查看工具显示一个普通错误:“无法打开文件”
我用h5py编写了该文件,因此我决定尝试使用它来读取数据。该文件以libver ='latest'的swmr模式编写。 我尝试了以下方法:
with h5py.File(fpath, 'r', swmr=True, libver='latest') as f:
    pass

返回错误信息 "OSError: 无法打开文件(文件尚未为 SWMR 写入而打开)"。

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

返回一个错误 "OSError: 无法打开文件(文件已经以写入模式打开(可以使用h5clear文件来清除文件一致性标志))"

现在我想知道,h5py模块是否已经实现了h5clear选项?我在任何地方都找不到关于这个的信息。

编辑:删除了文件(抱歉)


关于h5clear选项,请询问开发人员是否已经实现。h5py用户论坛位于:https://groups.google.com/forum/#!forum/h5py - kcw78
确实,您的文件可能已经损坏了。您尝试过使用批处理程序来读取它吗(例如HDFGroup的h5dump或随PyTables模块提供的ptdump)? - kcw78
感谢回复,我在HDF论坛上发布了一个帖子,链接为https://groups.google.com/forum/#!topic/h5py/zcyB2tNQ6Eo - Alex
感谢您的建议。我目前正在尝试弄清楚如何在Visual Studio中使用HDF工具,因为我的编程经验目前不幸仅限于Python。 - Alex
1
未找到 h5clear 命令。我已经安装了 hdf5 1.10.0-patch1。其他命令行工具如 h5dumph5repack 都可以正常使用。是否有任何方法可以使用现有的工具清除或重置标志?(顺便说一下,我使用的是 Ubuntu Bionic Beaver 操作系统) - hridayns
显示剩余2条评论
1个回答

3

如果你有一个hdf5文件,出现了错误 无法打开文件(文件已经以写入/ SWMR写入方式打开),但是你没有重新创建该文件的方法,你可以使用命令行工具h5clear清除文件一致性标志。

$> h5clear -s my_bad.h5

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

如果您已经安装了 Anaconda,则可以创建一个环境,安装软件包,然后使用以下命令从命令行运行 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之外的命令行中)清除了文件。 - Alex
从命令行中,我激活了Anaconda Python环境,并安装了pandas和h5py。然后我就可以使用命令行工具"h5clear"了。所以,我在命令行中输入了我回复中列出的代码。 - Steven C. Howell
我的conda提示似乎只调用HDF5包(而不是安装在Python中的那个),当我这样做时。 - Alex
你可以在命令行中指定特定的“h5clear”可执行文件,方法是输入相对/绝对路径,或进入h5clear所在的文件夹并从那里运行它。以第一种选项为例,在bash环境下(例如Windows上的git-bash),你可以运行/c/Users/myself/AppData/Local/Continuum/anaconda3/envs/my_env/Library/bin/h5clear -s my_bad.h5。在命令提示符中,你需要将路径转换为Windows样式,但除此之外应该与bash环境相同。 - Steven C. Howell
没错,就像我之前提到的那样,这并不是 Python 内部的解决方案,你需要下载实际的 HDF5 工具才能做到这一点。 - Alex
我只需要下载Python库中的pandas或h5py,无需下载其他任何内容。在安装Python库的过程中,可执行文件已添加到我的答案中的bin目录中。无需安装单独的HDF5实用程序。如果您真的想要,您可以直接从Python执行命令行实用程序。 - Steven C. Howell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接