平常世道 發表於 2020-11-22 18:15:00

Python 存储与读取HDF5文件

<p>&nbsp;</p>
<p>&nbsp;</p>
<div>
<div>
<h3>HDF5 简介</h3>
<p>HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等,详见其官方介绍:https://support.hdfgroup.org/HDF5/ 。</p>
<h2>HDF5 结构</h2>
<p>HDF5&nbsp;文件一般以&nbsp;.h5&nbsp;或者&nbsp;.hdf5&nbsp;作为后缀名,需要专门的软件才能打开预览文件的内容。HDF5&nbsp;文件结构中有&nbsp;2 primary objects:&nbsp;Groups&nbsp;和&nbsp;Datasets。</p>
<ul>
<li>Groups&nbsp;就类似于文件夹,每个&nbsp;HDF5&nbsp;文件其实就是根目录&nbsp;(root)&nbsp;group<code>'/',可以看成目录的容器,其中可以包含一个或多个 dataset 及其它的 group</code>。</li>
<li>Datasets&nbsp;类似于&nbsp;NumPy&nbsp;中的数组 array,可以当作数组的数据集合 。</li>
</ul>
<p>每个 dataset 可以分成两部分:&nbsp;原始数据 (raw) data values&nbsp;和&nbsp;元数据 metadata&nbsp;(a set of data that describes and gives information about other data =&gt; raw data)。</p>
<div class="highlight">
<pre><code class="language-cpp"><span class="o">+-- <span class="n">Dataset
<span class="o">|   <span class="o">+-- <span class="p">(<span class="n">Raw<span class="p">) <span class="n">Data <span class="n">Values <span class="p">(<span class="nl">eg<span class="p">: <span class="n">a <span class="mi">4 <span class="n">x <span class="mi">5 <span class="n">x <span class="mi">6 <span class="n">matrix<span class="p">)
<span class="o">|   <span class="o">+-- <span class="n">Metadata
<span class="o">|   <span class="o">|   <span class="o">+-- <span class="n">Dataspace <span class="p">(<span class="nl">eg<span class="p">: <span class="n">Rank <span class="o">= <span class="mi">3<span class="p">, <span class="n">Dimensions <span class="o">= <span class="p">{<span class="mi">4<span class="p">, <span class="mi">5<span class="p">, <span class="mi">6<span class="p">})
<span class="o">|   <span class="o">|   <span class="o">+-- <span class="n">Datatype <span class="p">(<span class="nl">eg<span class="p">: <span class="n">Integer<span class="p">)
<span class="o">|   <span class="o">|   <span class="o">+-- <span class="n">Properties <span class="p">(<span class="nl">eg<span class="p">: <span class="n">Chuncked<span class="p">, <span class="n">Compressed<span class="p">)
<span class="o">|   <span class="o">|   <span class="o">+-- <span class="n">Attributes <span class="p">(<span class="nl">eg<span class="p">: <span class="n">attr1 <span class="o">= <span class="mf">32.4<span class="p">, <span class="n">attr2 <span class="o">= <span class="s">"hello"<span class="p">, <span class="p">...)
<span class="o">|
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>从上面的结构中可以看出:</p>
<ul>
<li>Dataspace&nbsp;给出原始数据的秩&nbsp;(Rank) 和维度&nbsp;(dimension)</li>
<li>Datatype&nbsp;给出数据类型</li>
<li>Properties&nbsp;说明该 dataset 的分块储存以及压缩情况</li>
<ul>
<li>Chunked: Better access time for subsets; extendible</li>
<li>Chunked &amp; Compressed: Improves storage efficiency, transmission speed</li>
</ul>
<li>Attributes&nbsp;为该 dataset 的其他自定义属性</li>
</ul>
<p>整个&nbsp;HDF5&nbsp;文件的结构如下所示:</p>
<div class="highlight">
<div class="cnblogs_code">
<pre>+-- /
|   +--<span style="color: rgba(0, 0, 0, 1)"> group_1
</span>|   |   +--<span style="color: rgba(0, 0, 0, 1)"> dataset_1_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_1_1_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_1_1_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |   |
|   |   +--<span style="color: rgba(0, 0, 0, 1)"> dataset_1_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_1_2_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_1_2_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |   |
|   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |
|   +--<span style="color: rgba(0, 0, 0, 1)"> group_2
</span>|   |   +--<span style="color: rgba(0, 0, 0, 1)"> dataset_2_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_2_1_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_2_1_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |   |
|   |   +--<span style="color: rgba(0, 0, 0, 1)"> dataset_2_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_2_2_1
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> attribute_2_2_2
</span>|   |   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |   |
|   |   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|   |
|   +--<span style="color: rgba(0, 0, 0, 1)"> ...
</span>|</pre>
</div>
</div>
</div>
</div>
<div>
<div>一个 HDF5 文件从一个命名为 "/" 的 group 开始,所有的 dataset 和其它 group 都包含在此 group 下,当操作 HDF5 文件时,如果没有显式指定 group 的 dataset 都是默认指 "/" 下的 dataset,另外类似相对文件路径的 group 名字都是相对于 "/" 的。</div>
</div>
<div>安装</div>
<div>
<div class="cnblogs_code">
<pre>pip install h5py</pre>
</div>
<p>Python读写HDF5文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">!/usr/bin/python</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)"> -*- coding: UTF-8 -*-</span><span style="color: rgba(0, 128, 0, 1)">
#
#</span><span style="color: rgba(0, 128, 0, 1)"> Created by WW on Jan. 26, 2020</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)"> All rights reserved.</span><span style="color: rgba(0, 128, 0, 1)">
#
</span>
<span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> h5py
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> numpy as np

</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> main():
    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">===========================================================================</span>
    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Create a HDF5 file.</span>
    f = h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h5py_example.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span>)    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> mode = {'w', 'r', 'a'}</span>

    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Create two groups under root '/'.</span>
    g1 = f.create_group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    g2 </span>= f.create_group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Create a dataset under root '/'.</span>
    d = f.create_dataset(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset</span><span style="color: rgba(128, 0, 0, 1)">"</span>, data=np.arange(16).reshape())

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Add two attributes to dataset 'dset'</span>
    d.attrs[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myAttr1</span><span style="color: rgba(128, 0, 0, 1)">"</span>] =
    d.attrs[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myAttr2</span><span style="color: rgba(128, 0, 0, 1)">"</span>] = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello, world!</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Create a group and a dataset under group "bar1".</span>
    c1 = g1.create_group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">car1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    d1 </span>= g1.create_dataset(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, data=np.arange(10<span style="color: rgba(0, 0, 0, 1)">))

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Create a group and a dataset under group "bar2".</span>
    c2 = g2.create_group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">car2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    d2 </span>= g2.create_dataset(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset2</span><span style="color: rgba(128, 0, 0, 1)">"</span>, data=np.arange(10<span style="color: rgba(0, 0, 0, 1)">))

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Save and exit the file.</span>
<span style="color: rgba(0, 0, 0, 1)">    f.close()

    </span><span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(128, 0, 0, 1)"> h5py_example.hdf5 file structure
    +-- '/'
    |   +--    group "bar1"
    |   |   +-- group "car1"
    |   |   |   +-- None
    |   |   |   
    |   |   +-- dataset "dset1"
    |   |
    |   +-- group "bar2"
    |   |   +-- group "car2"
    |   |   |   +-- None
    |   |   |
    |   |   +-- dataset "dset2"
    |   |   
    |   +-- dataset "dset"
    |   |   +-- attribute "myAttr1"
    |   |   +-- attribute "myAttr2"
    |   |   
    |   
    </span><span style="color: rgba(128, 0, 0, 1)">'''</span>

    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">===========================================================================</span>
    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Read HDF5 file.</span>
    f = h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h5py_example.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>)    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> mode = {'w', 'r', 'a'}</span>

    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Print the keys of groups and datasets under '/'.</span>
    <span style="color: rgba(0, 0, 255, 1)">print</span>(f.filename, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span>(, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">===================================================</span>
    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Read dataset 'dset' under '/'.</span>
    d = f[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Print the data of 'dset'.</span>
    <span style="color: rgba(0, 0, 255, 1)">print</span>(d.name, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(d[:])

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Print the attributes of dataset 'dset'.</span>
    <span style="color: rgba(0, 0, 255, 1)">for</span> key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> d.attrs.keys():
      </span><span style="color: rgba(0, 0, 255, 1)">print</span>(key, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, d.attrs)

    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">()

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">===================================================</span>
    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Read group 'bar1'.</span>
    g = f[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Print the keys of groups and datasets under group 'bar1'.</span>
    <span style="color: rgba(0, 0, 255, 1)">print</span>()

    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Three methods to print the data of 'dset1'.</span>
    <span style="color: rgba(0, 0, 255, 1)">print</span>(f[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/bar1/dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>][:])      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 1. absolute path</span>

    <span style="color: rgba(0, 0, 255, 1)">print</span>(f[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar1</span><span style="color: rgba(128, 0, 0, 1)">"</span>][<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>][:])    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 2. relative path: file[][]</span>

    <span style="color: rgba(0, 0, 255, 1)">print</span>(g[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">'</span>][:])      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 3. relative path: group[]</span>



    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Delete a database.</span>
    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Notice: the mode should be 'a' when you read a file.</span>
    <span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(128, 0, 0, 1)">
    del g["dset1"]
    </span><span style="color: rgba(128, 0, 0, 1)">'''</span>

    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Save and exit the file</span>
<span style="color: rgba(0, 0, 0, 1)">    f.close()

</span><span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
    main()</span></pre>
</div>
<h3>相关代码示例</h3>
<p>创建一个h5py文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> h5py
f</span>=h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myh5py.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>创建dataset</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> h5py
f</span>=h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myh5py.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型</span>
d1=f.create_dataset(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, (20,), <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">i</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">for</span> key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> f.keys():
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(key)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(f.name)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(f.shape)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(f.value)

输出:
dset1
</span>/<span style="color: rgba(0, 0, 0, 1)">dset1
(</span>20<span style="color: rgba(0, 0, 0, 1)">,)
</span></pre>
</div>
<p>赋值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> h5py
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> numpy as np
f</span>=h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myh5py.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

d1</span>=f.create_dataset(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>,(20,),<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">i</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">赋值</span>
d1[...]=np.arange(20<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">或者我们可以直接按照下面的方式创建数据集并赋值</span>
f[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset2</span><span style="color: rgba(128, 0, 0, 1)">"</span>]=np.arange(15<span style="color: rgba(0, 0, 0, 1)">)

</span><span style="color: rgba(0, 0, 255, 1)">for</span> key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> f.keys():
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(f.name)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(f.value)

输出:
</span>/<span style="color: rgba(0, 0, 0, 1)">dset1
[ 0</span>123456789 10 11 12 13 14 15 16 17 18 19<span style="color: rgba(0, 0, 0, 1)">]
</span>/<span style="color: rgba(0, 0, 0, 1)">dset2
[ 0</span>123456789 10 11 12 13 14]</pre>
</div>
<p>创建group</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> h5py
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> numpy as np
f</span>=h5py.File(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myh5py.hdf5</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建一个名字为bar的组</span>
g1=f.create_group(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。</span>
g1[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset1</span><span style="color: rgba(128, 0, 0, 1)">"</span>]=np.arange(10<span style="color: rgba(0, 0, 0, 1)">)
g1[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dset2</span><span style="color: rgba(128, 0, 0, 1)">"</span>]=np.arange(12).reshape((3,4<span style="color: rgba(0, 0, 0, 1)">))

</span><span style="color: rgba(0, 0, 255, 1)">for</span> key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> g1.keys():
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(g1.name)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(g1.value)

输出:
</span>/bar/<span style="color: rgba(0, 0, 0, 1)">dset1

</span>/bar/<span style="color: rgba(0, 0, 0, 1)">dset2
[[ 0</span>123<span style="color: rgba(0, 0, 0, 1)">]
[ </span>4567<span style="color: rgba(0, 0, 0, 1)">]
[ </span>89 10 11]]</pre>
</div>
<p>删除某个key下的数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 删除某个key,调用remove</span>
f.remove(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>最后pandsa读取HDF5格式文件</p>
<div class="cnblogs_code">
<pre>
<span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> pandas as pd
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> numpy as np

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 将mode改成r即可</span>
hdf5 = pd.HDFStore(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello.h5</span><span style="color: rgba(128, 0, 0, 1)">"</span>, mode=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 或者</span>
<span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
hdfs = pd.read_hdf("hello.h5", key="xxx")
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 128, 0, 1)"><br></span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div><br><br>
来源:https://www.cnblogs.com/-wenli/p/14020264.html
頁: [1]
查看完整版本: Python 存储与读取HDF5文件