Io 在Julia中追加或创建HDF5文件
我似乎无法在Julia中以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
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