Matlab 和 HDF5:写入的字符串属性具有 b'string' 格式



我使用的是带有字符串属性的hdf5结构。我通常用python编写数据,没有任何问题。现在我需要从matlab中编写相同的结构。

对于我使用h5writeatt((的属性,例如:

h5writeatt(filepath, dataset, 'myattr', 'mystringvalue'); 

当我用h5py从python中读取属性时,所有属性都以格式返回

value=b'最小值'

有什么想法为什么matlab使用这种格式以及如何禁用它吗?我正在做字符串比较,因为b和'是字符串的一部分,所以c失败了。当然,编写一个小函数来检查这种格式并将其删除并不是很困难,但似乎是不必要的开销。

感谢您的帮助

b'foo'是Python字节序列对象的表示,而不是字符串。

Python 3.x中的字符串是一种不同的数据类型,它是一系列Unicode代码点,而不是字节,因此Python(与MATLAB不同(可以正确处理多种语言的文本。

如果将字节序列与字符串进行比较,则它们不相同:

>>> s = 'foo'
>>> b = bytes([102, 111, 111])
>>> b
b'foo'
>>> s == b
False

为了能够比较它们,您需要将字符串encode与字节对象进行比较,或者将字节对象decode与字符串进行比较:

>>> s.encode('ascii') == b
True
>>> s == b.decode('ascii')
True

请注意,您必须指定要在字符串和字节之间转换的编码。ascii将始终将一个代码点转换为一个字节,反之亦然,但如果遇到大于127的字节值,则会引发错误-如果需要使用这些字符,则需要决定使用的代码页,并指定合适的编解码器。当然,Unicode的发明就是为了消除这种令人头疼的问题。

最新更新