在 Julia 中追加或创建 HDF5 文件

Append to or create an HDF5 file in Julia

julia> using HDF5

我似乎无法在 Julia 中以 r+ 模式创建文件。

julia> fid = h5open("/tmp/test.h5", "r+")
...
ERROR: Cannot access file /tmp/test.h5
...

但是:

julia> fid = h5open("/tmp/test.h5", "w")
HDF5 data file: /tmp/test.h5

这是预期的行为吗?如果是这样,附加到 HDF5 文件的正确方法是什么,如果它不存在则创建?

我的尝试:

close(h5open("/tmp/test.h5", "w")) ## looks ugly to me

for dataset in ["A", "B", "C"]:

    A = long_operation_which_returns_lots_of_data()

    h5open("/tmp/test.h5", "r+") do file
        write(file, "group/$dataset", A)
    end
end

编辑:在我的场景中,每次循环迭代都需要很长时间来计算并生成大量数据,这些数据保留在内存中。因此,有必要在每次迭代时写入文件并从内存中清除对象。

首先,问题中的 close(h5open(...)) # look ugly 会破坏(即删除其中的内容)任何现有文件。

附加的解决方法是使用 isfile 检查文件是否存在。喜欢:

h5open("/tmp/test.h5",isfile("/tmp/test.h5") ? "r+" : "w") do file
       write(file,"group/J",[10,11,12,13])
end

你也可以试试 try:

f = try
    h5open("/tmp/non.h5","r+") 
catch e 
    if isa(e,ErrorException) 
        h5open("/tmp/non.h5","w")
    else
        throw(e)
    end
end

在任何情况下,额外的丑陋都可以安全地隐藏在函数中并远离主流。

当打开一个不存在的文件时,有一些来自 HDF5 C 库的错误消息。 IIRC 有一种方法可以关闭它们。