在Julia中附加或创建HDF5文件

时间:2015-12-11 20:39:14

标签: io julia hdf5

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

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

1 个答案:

答案 0 :(得分:2)

首先,问题中的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有一种方法可以关闭它们。