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
编辑:在我的场景中,每次循环迭代都需要很长时间来计算并生成大量数据,这些数据会保留在内存中。因此,有必要在每次迭代时写入文件并从内存中清除对象。
答案 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有一种方法可以关闭它们。