<p>如果您使用的是h5py版本2.9.0或更新版本,请参见<a href="https://stackoverflow.com/a/57278604/190597">Mike's answer</a>。在</p>
<hr/>
<p>根据<a href="http://www.h5py.org/docs/low/h5f.html#h5py.h5f.FileID.get_access_plist" rel="nofollow noreferrer">the docs</a>,<code>get_access_plist()</code>返回文件访问属性列表的<strong>副本</strong>。因此,修改副本不会影响原始文件也就不足为奇了。在</p>
<p>高级接口似乎没有提供更改缓存设置的方法。在</p>
<p>下面是如何使用低级接口来实现这一点。在</p>
<pre><code>propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
print(settings)
# [0, 521, 1048576, 0.75]
settings[2] *= 5
propfaid.set_cache(*settings)
settings = propfaid.get_cache()
print(settings)
# (0, 521, 5242880, 0.75)
</code></pre>
<p>上面创建了一个<a href="http://www.h5py.org/docs/low/h5p.html#file-access" rel="nofollow noreferrer">PropFAID</a>。然后我们可以打开该文件并通过以下方式获得<a href="http://www.h5py.org/docs/low/h5f.html#functional-api" rel="nofollow noreferrer">FileID</a>:</p>
^{pr2}$
<p>我们可以使用<code>fid</code>通过向<code>h5py.File</code>传递<code>fid</code>来打开具有高级接口的文件:</p>
<pre><code> f = h5py.File(fid)
print(f.id.get_access_plist().get_cache())
# (0, 521, 5242880, 0.75)
</code></pre>
<p>因此,您仍然可以使用高级接口,但它需要一些
费尽心思去那里。另一方面,如果你把它提炼成最基本的东西,也许也没那么糟糕:</p>
<pre><code>import h5py
import contextlib
filename = '/tmp/foo.hdf5'
propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
settings[2] *= 5
propfaid.set_cache(*settings)
with contextlib.closing(h5py.h5f.open(filename, fapl=propfaid)) as fid:
f = h5py.File(fid)
</code></pre>