Io 在Julia中追加或创建HDF5文件

Io 在Julia中追加或创建HDF5文件,io,julia,hdf5,Io,Julia,Hdf5,我似乎无法在Julia中以r+模式创建文件 julia> using HDF5 然而: julia> fid = h5open("/tmp/test.h5", "r+") ... ERROR: Cannot access file /tmp/test.h5 ... 这是故意的行为吗?如果是这样的话,在HDF5文件不存在的情况下,什么是正确的附加到HDF5文件并进行创建的方法 我的尝试: julia> fid = h5open("/tmp/test.h5", "w") HDF

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

julia> using HDF5
然而:

julia> fid = h5open("/tmp/test.h5", "r+")
...
ERROR: Cannot access file /tmp/test.h5
...
这是故意的行为吗?如果是这样的话,在HDF5文件不存在的情况下,什么是正确的附加到HDF5文件并进行创建的方法

我的尝试:

julia> fid = h5open("/tmp/test.h5", "w")
HDF5 data file: /tmp/test.h5
编辑:在我的场景中,每个循环迭代都需要很长的时间来计算并生成大量数据,这些数据会保留在内存中。因此,在每次迭代时写入文件并从内存中清除对象是必要的

首先,问题中的
close(h5open(…)#look丑陋
将删除任何现有文件的内容

附加的一个解决方法是使用
isfile
检查文件是否存在。比如:

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
您也可以尝试
尝试

h5open("/tmp/test.h5",isfile("/tmp/test.h5") ? "r+" : "w") do file
       write(file,"group/J",[10,11,12,13])
end
在任何情况下,额外的丑陋可以安全地隐藏在函数中,远离主流


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

由于该调用位于循环之外,所以可以使用Clobbing。我希望用
r+
打开一个文件会像
w
那样创建一个文件(我不明白为什么不应该这样),所以我可以把这一行全部删除,然后在循环中打开文件。当您知道该文件不存在时,允许引发异常似乎也不太好。您建议的第一个选项在我看来是最好的。最好不要在循环中打开和关闭文件。在循环外打开一次会更有效。在我的循环中不是这样,因为每次迭代都需要很长的时间,并且会生成大量留在内存中的数据。每次迭代都需要将其保存到磁盘并清除内存。我将用此信息更新问题。
f = try
    h5open("/tmp/non.h5","r+") 
catch e 
    if isa(e,ErrorException) 
        h5open("/tmp/non.h5","w")
    else
        throw(e)
    end
end