Python 存储与读取HDF5文件
<p> </p><p> </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 文件一般以 .h5 或者 .hdf5 作为后缀名,需要专门的软件才能打开预览文件的内容。HDF5 文件结构中有 2 primary objects: Groups 和 Datasets。</p>
<ul>
<li>Groups 就类似于文件夹,每个 HDF5 文件其实就是根目录 (root) group<code>'/',可以看成目录的容器,其中可以包含一个或多个 dataset 及其它的 group</code>。</li>
<li>Datasets 类似于 NumPy 中的数组 array,可以当作数组的数据集合 。</li>
</ul>
<p>每个 dataset 可以分成两部分: 原始数据 (raw) data values 和 元数据 metadata (a set of data that describes and gives information about other data => 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 给出原始数据的秩 (Rank) 和维度 (dimension)</li>
<li>Datatype 给出数据类型</li>
<li>Properties 说明该 dataset 的分块储存以及压缩情况</li>
<ul>
<li>Chunked: Better access time for subsets; extendible</li>
<li>Chunked & Compressed: Improves storage efficiency, transmission speed</li>
</ul>
<li>Attributes 为该 dataset 的其他自定义属性</li>
</ul>
<p>整个 HDF5 文件的结构如下所示:</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> </p>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/-wenli/p/14020264.html
頁:
[1]