Skip to main content

用于从 HDF5 文件读取/写入 Python 类型的实用程序,包括 MATLAB v7.3 MAT 文件。

项目描述

概述

这个 Python 包提供了高级实用程序,用于从 HDF5(Heirarchal Data Format)格式的文件读取/写入各种 Python 类型。该软件包还提供对 MATLAB MAT v7.3 格式文件的支持,这些文件只是具有不同扩展名和一些额外元数据的 HDF5 文件。

所有这些都是在没有腌制数据的情况下完成的。Pickling 不利于安全性,因为它允许在解释器中执行任意代码。人们希望能够从不受信任的来源读取可能的 HDF5 和 MAT 文件,因此在这个包中避免了酸洗。

该软件包的文档位于 http://pythonhosted.org/hdf5storage/

该软件包的源代码位于 https://github.com/frejanordsiek/hdf5storage

该软件包根据 2 条款 BSD 许可证 ( https://github.com/frejanordsiek/hdf5storage/blob/master/COPYING.txt ) 获得许可。

安装

依赖项

此包仅支持 Python >= 2.6。

这个包需要 numpy 和 h5py (>= 2.1) 包才能运行。请注意,完整功能需要 h5py >= 2.3。一个可选的依赖项是 scipy 包。

通过 pip 安装

这个包在PyPI上。要使用 pip 安装 hdf5storage,请运行以下命令:

pip install hdf5storage

从源安装

要从源代码安装 hdf5storage,请下载包,然后安装依赖项

pip install -r requirements.txt

然后安装包,用 Python 运行命令

python setup.py install

运行测试

对于测试,需要包nose (>= 1.0) 以及Python 2.6 上的unittest2。有一些测试需要安装 Matlab 和 scipy 并位于可执行路径中。没有它们意味着这些测试无法运行(它们将被跳过),但所有其他测试都将运行。要安装除 scipy 之外的所有测试依赖项,请运行

pip install -r requirements_tests.txt.

运行测试

python setup.py nosetests

建筑文档

该文档还需要 sphinx (>= 1.7)。可以通过以下方式安装文档依赖项

pip install -r requirements_doc.txt

构建文档

python setup.py build_sphinx

蟒蛇2

这个包是为 Python 3 设计和编写的,后来添加了对 Python 2.7 和 2.6 的支持。这确实意味着在 Python 2 中有些东西有点笨拙。示例包括要求字典的unicode键、intlong类型都映射到 Python 3 int类型等。存储格式的元数据在 Python 中看起来更熟悉3 立场也是如此。

该文档主要是根据 Python 3 语法和类型编写的。将指出除了直接翻译语法和类型之外的重要 Python 2 信息。

分层数据格式 5 (HDF5)

HDF5 文件(参见http://www.hdfgroup.org/HDF5/)是用于交换数字数据的常用文件格式。它内置了对多种数字格式(无符号整数、浮点数、字符串等)作为标量和数组、枚举和复合类型的支持。它还处理不同硬件平台上数据表示的差异(字节序、不同的浮点格式等)。从名称可以想象,数据在 HDF5 文件中以分层形式表示,对 Unix 文件系统进行建模(Datasets 相当于文件,Groups 相当于目录,并且支持链接)。

这个包使用 h5py 包 ( http://www.h5py.org/ ) 与PyTables 包 ( http://www.pytables.org/ ) 连接 HDF5 文件。

MATLAB MAT v7.3 文件支持

MATLAB ( http://www.mathworks.com/ ) 7.3 版及更高版本的 MAT 文件是具有不同文件扩展名 ( .mat ) 和一组非常具体的元数据和存储约定的 HDF5 文件。此包为一组有限的 Python 和 MATLAB 类型提供读写支持。

SciPy ( http://scipy.org/ ) 具有读取和写入旧 MAT 文件格式的功能。这个包具有模仿 scipy.io.savematscipy.io.loadmat函数的函数,它们具有相同的名称和相似的参数。如果 MAT 文件格式不是基于 HDF5 的格式,则分派到 SciPy 版本。

支持的类型

下表给出了支持的 Python 和 MATLAB 类型。这些表假定一个已导入集合和 numpy 为:

import collections as cl
import numpy as np

该表给出了可以读取和写入的 Python 类型、支持它的该包的第一个版本、它被转换为用于存储的 numpy 类型(如果没有写入类型信息,那将是它被读回的内容)如果以 MAT 文件为目标,它将成为 MATLAB 类,并且此包的第一个版本支持编写它以便 MATLAB 可以读取它。

Python

MATLAB

类型

版本

转换成

班级

版本

布尔

0.1

np.bool_ 或 np.uint8

合乎逻辑的

0.1 [ 1 ]

没有任何

0.1

np.float64([])

[]

0.1

整数[ 2 ] [ 3 ]

0.1

np.int64 [ 2 ]

整数64

0.1

[ 3 ] [ 4 ]

0.1

np.int64

整数64

0.1

漂浮

0.1

np.float64

双倍的

0.1

复杂的

0.1

np.complex128

双倍的

0.1

字符串

0.1

np.uint32/16

字符

0.1 [ 5 ]

字节

0.1

np.bytes_ 或 np.uint16

字符

0.1 [ 6 ]

字节数组

0.1

np.bytes_ 或 np.uint16

字符

0.1 [ 6 ]

列表

0.1

np.object_

细胞

0.1

元组

0.1

np.object_

细胞

0.1

0.1

np.object_

细胞

0.1

冻结集

0.1

np.object_

细胞

0.1

cl.deque

0.1

np.object_

细胞

0.1

听写

0.1

结构

0.1 [ 7 ]

np.bool_

0.1

合乎逻辑的

0.1

np.void

0.1

np.uint8

0.1

uint8

0.1

np.uint16

0.1

uint16

0.1

np.uint32

0.1

uint32

0.1

np.uint64

0.1

uint64

0.1

np.uint8

0.1

整数8

0.1

np.int16

0.1

整数16

0.1

np.int32

0.1

整数32

0.1

np.int64

0.1

整数64

0.1

np.float16 [ 8 ]

0.1

np.float32

0.1

单身的

0.1

np.float64

0.1

双倍的

0.1

np.complex64

0.1

单身的

0.1

np.complex128

0.1

双倍的

0.1

np.str_

0.1

np.uint32/16

字符/uint32

0.1 [ 5 ]

np.bytes_

0.1

np.bytes_ 或 np.uint16

字符

0.1 [ 6 ]

np.object_

0.1

细胞

0.1

np.ndarray

0.1

[ 9 ] [ 10 ]

[ 9 ] [ 10 ]

0.1 [ 9 ] [ 11 ]

np.矩阵

0.1

[ 9 ]

[ 9 ]

0.1 [ 9 ]

np.chararray

0.1

[ 9 ]

[ 9 ]

0.1 [ 9 ]

np.recarray

0.1

结构化 np.ndarray

[ 9 ] [ 10 ]

0.1 [ 9 ]

下表给出了可以从 MAT 文件中读取的 MATLAB 类、可以读取它们的此包的第一个版本以及它们被读取的 Python 类型。

MATLAB 类

版本

蟒蛇类型

合乎逻辑的

0.1

np.bool_

单身的

0.1

np.float32 或 np.complex64 [ 12 ]

双倍的

0.1

np.float64 或 np.complex128 [ 12 ]

uint8

0.1

np.uint8

uint16

0.1

np.uint16

uint32

0.1

np.uint32

uint64

0.1

np.uint64

整数8

0.1

np.int8

整数16

0.1

np.int16

整数32

0.1

np.int32

整数64

0.1

np.int64

字符

0.1

np.str_

结构

0.1

结构化 np.ndarray

细胞

0.1

np.object_

规范空

0.1

np.float64([])

版本

0.1.18。性能改进版本。
  • 来自 Daniel Hrisca 的拉取请求 #111。对对象的__getitem__方法的多次重复调用 变成了单次调用。

  • 本着 PR #111 的精神,进一步减少__getitem__调用。

0.1.17。修复了以下问题的错误修复和弃用解决方法版本。
  • 问题 #109。修复了 32 位平台的修复问题 #102(之前的修复是 segfaulting)。

  • 移动到使用setuptools中的pkg_resources.parse_versiondistutils.version类作为后备,而不是仅使用后者,以准备删除distutils (PEP 632) 并防止在标记为已弃用的 Python 版本上发出警告。

  • 问题 #110。将numpy 类型上的 tostring 方法的所有使用更改为使用tobytes如果可用),使用tostring作为旧版本 numpy 的后备,但它不是。

0.1.16。修复了以下错误的错误修复版本。
  • 问题 #81 和 #82。h5py.File将要求将来显式传递模式。所有没有通过它的调用都固定通过它。

  • 问题 #102。添加了对 h5py 3.0 和 3.1 的支持。

  • 问题 #73。修复了loadmat中缺少变量会导致函数认为文件是 v7.3 之前格式的 MAT 文件回退到 scipy.io.loadmat的错误,因为该文件是 v7.3 格式的 MAT 文件.

  • 修复了文档字符串和阻止文档构建的文档中的格式问题。

0.1.15。修复了以下错误的错误修复版本。
  • 问题 #68。修复了strnumpy.unicode_ 字符串(但不是它们的 ndarrays)以 uint32格式保存的错误,无论 Options.convert_numpy_bytes_to_utf16的值如何。

  • 第 70 期。更新了setup.pyrequirements.txt以指定可用于特定 python 版本的 numpy 和 h5py 的最大版本(避免支持放弃的版本)。

  • 问题 #71。修复了在为以类似结构的方式写入的数据执行 python 元数据时不会始终写入“python_fields”属性的错误。该错误导致写入和读取时不保留字段顺序。

  • 当没有元数据用于仅适用于旧版本 numpy 的结构化 dtype 时,修复了测试中的断言以处理字段重新排序。

  • 问题 #72。修复了填充了具有相同形状的 ndarray 的 python 集合被转换为多维对象 ndarray 而不是元素的 1D 对象 ndarray 的错误。

0.1.14。错误修复版本还添加了一些功能。
  • 问题 #45。修复了 Python 3.0 到 3.2 的 unicode 字符串中的语法错误。

  • 问题#44 和#47。修复了字符串类型转换和存储测试中的错误。

  • 问题 #46。修复了由于信号 NaN 而在测试中引发的RuntimeWarnings 。

  • 添加了用于构建文档和运行测试的需求文件。

  • 如果找不到 Matlab,则跳过 Matlab 兼容性测试,而不是引发错误。

0.1.13。错误修复版本修复了以下错误。
  • 问题 #36。修复了将intlong写入HDF5 及其在 32 位系统上的测试的错误。

0.1.12。错误修复版本修复了以下错误。此外,还更新了版权年份,并在用于测试的 Matlab 文件中放置了通知。
  • 问题#32。 在从存储 python 元数据但不存储 Matlab 元数据的 HDF5 文件中读取时,在重塑np.ndarray之前修复了转置。

  • 问题 #33。修复了读取空 numpy 字符串数组时丢失字符数的问题。

  • 问题 #34。修复了使用 Matlab 元数据编写np.chararray时的转换错误。

0.1.11。修正以下问题的修正版本。
  • 第 30 期。修复了 loadmat不以读取模式打开文件的问题。

0.1.10。次要功能/性能修复版本执行以下操作。
  • 问题 #29。添加了写入读取功能以一次写入和读取多条数据,并使 savematloadmat使用它们来提高性能。以前,HDF5 文件是针对每条数据打开和关闭的,这会影响性能,尤其是对于大文件。

0.1.9。错误修复和次要功能发布执行以下操作。
  • 问题 #23。修复了字段名称为“O”的结构化np.ndarray永远无法写入 HDF5 COMPOUND 数据集的错误(错误地认为字段的 dtype 是对象)。

  • 问题 #6。添加了可选的数据压缩和数据校验和的存储。由几个新选项控制。

0.1.8。错误修复版本修复了以下两个错误。
  • 问题 #21。修复了在编写 MATLAB 元数据时编写dict类型时未设置“MATLAB_class”属性的错误。

  • 问题 #22。修复了在dict键和结构化np.ndarray的字段名称中允许使用空字符 ( '\x00' ) 和正斜杠 ( '/' )的错误(除了在未按情况设置structured_numpy_ndarray_as_struct时允许正斜杠 当设置了matlab_compatible选项时)。这些会导致h5py包和 HDF5 库出现问题。 NotImplementedError现在在这些情况下被抛出。

0.1.7。错误修复版本增加了兼容性选项和一些添加的测试代码。做了以下。
  • 修复了在 MATLAB MAT v7.3 文件中读取大于 2 GB 的变量时没有为hdf5storage.loadmat指定要读取的显式变量名称的问题。Fix 还通过删除不需要的内存副本来稍微减少内存消耗和处理时间。

  • 选项现在将接受它不支持的任何其他关键字参数,忽略它们,以便与带有附加选项的未来包版本兼容。

  • 添加了用于读取已压缩或应用了其他 HDF5 过滤器的数据的测试。

0.1.6。错误修复版本修复了在 32 位系统上确定 Python 2.x int的最大大小的错误。

0.1.5。错误修复版本修复了以下错误。
  • 修复了在 Python 2.x 中回读时可能存储的int太大而无法放入int的错误。当它太大时,它会转换为long

  • 修复了intlong太大而无法放入np.int64引发错误异常的错误。

  • 修复了无法正确读取或写入具有非 ASCII 字符(假定为 Python 2.x 中的 UTF-8 编码)的结构化np.ndarray的字段名称的错误。

  • 修复了当设置该选项时,具有非 ASCII 字符的np.bytes_可能被错误地转换为 UTF-16 的错误(在进行 MATLAB 兼容性时隐式设置)。现在,它抛出一个NotImplementedError

0.1.4。错误修复版本修复了以下错误。感谢mrdomino编写错误修复程序。
  • 修复了当dtype是位置参数时,它被用作np.ndarray.astype的关键字参数的 错误。

  • 修复了 Ubuntu 12.04 上没有h5py.__version__导致的错误。

0.1.3。错误修复版本修复了以下错误。
  • 修复了正确读取和写入空结构化np.ndarray(具有字段)的能力。

0.1.2。错误修复版本修复了以下错误。
  • 删除了对2.2之前的 h5py 版本的np.float16的错误支持,因为那时引入了对它的支持。

  • 当未设置结构化的_numpy_ndarray_as_struct选项时,现在可以写入一个或多个字段为 “对象” dtype 的结构化 np.ndarray,而不会出现错误。它们被写成一个 HDF5 组,就像设置了选项一样。

  • 当使用的 h5py 包的版本为2.3或更高版本时,已添加对 MATLAB 中结构数据类型的“MATLAB_fields”属性的支持。早期版本仍然缺少支持(此软件包需要最低版本2.1)。

  • 检查类型dict中的非 unicode 字符串键(Python 3 中的str和 Python 2 中的unicode )是在对 HDF5 文件进行任何更改之前而不是在中间完成的,因此如果键无效,则不会应用任何更改存在。

  • HDF5 用户块在数据写入 HDF5 文件的开始而不是结束时设置了适当的元数据以支持 MATLAB,这意味着写入可能会崩溃,并且文件仍然是有效的 MATLAB 文件。

0.1.1。错误修复版本修复了以下错误。
  • str现在写成numpy.str_而不是 numpy.bytes_

  • 现在可以正确读取实部或虚部为nan 但另一部分不是的复数,而不是将两个部分都设置为nan

  • 修复了由于str.decode()unicode.encode()不采用与 Python 3 中相同的关键字参数而导致的 Python 2 上的字符串转换错误 。

  • 现在可以在 Python 2 上读取 MATLAB 结构体数组而不会产生错误。

  • 如果设置了convert_numpy_str_to_utf16选项, numpy.str_现在在 Python 2 上写为numpy.uint16并且可以在不使用 UTF-16 双峰的情况下完成转换,而不是总是将它们写为numpy.uint32

0.1。初始版本。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布