在 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 有一种方法可以关闭它们。
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 有一种方法可以关闭它们。