我能够通过结合以下Stack Overflow问题中定义的高级和低级Python h5py API来修改HDF5文件的缓存设置:How to set cache settings while using h5py high level interface?
我收到一条错误消息,说我在尝试重命名文件时仍然打开h5文件。 Python" with"在HDF5写入操作完成并刷新文件后,带有contextlib的语句似乎没有关闭文件。如何确保使用低级API或高级API关闭文件?你能举个例子吗?
import h5py
import contextlib
import os
filename = 'foo_2.h5'
propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
settings[2] *= 5
propfaid.set_cache(*settings)
with h5py.File(filename, 'w') as hf:
print 'file created'
with contextlib.closing(h5py.h5f.open(filename, fapl=propfaid)) as fid:
f = h5py.File(fid)
f.flush()
# f.close() Seems to be working only in Python 3.4.3 but not in 2.7.7
#and the "with contextlib.closing(...) does not work on either version
f.close()
os.rename(filename, 'foo_2.h5')
其他信息:
操作系统:Windows
Python:2.7.7
Anaconda分布:2.0.1
H5py版本:2.3.0
答案 0 :(得分:0)
我认为你在寻找.close()
f.close()
虽然仔细观察,但我不确定为什么contextlib.closing(...)不起作用。
我将涉及contextlib的行编辑为:
with contextlib.closing(h5py.File(filename, fapl=propfaid)) as fid:
并删除
f = h5py.File(fid)
之后,我可以检查fid是否已关闭,并且重命名文件按预期工作。
print fid
<Closed HDF5 file>
os.rename(filename, 'foo2.hdf5')
没有错误,目录检查显示新名称