我使用的是带有字符串属性的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的发明就是为了消除这种令人头疼的问题。