Matlab和HDF5:书面字符串属性的格式为b'string'

时间:2018-07-23 14:10:00

标签: matlab types attributes hdf5

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

对于属性,我正在使用h5writeatt(),例如:

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

当我使用h5py从python读取属性时,所有属性都以

格式返回

value = b'mystringvalue'

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

b'foo'是Python byte sequence object的表示形式,而不是字符串。

Python 3.x中的字符串是a different data type,它是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的字节值,则会引发错误-如果需要使用这些字符,则需要确定要使用的代码页正在使用并指定suitable codec代替。当然,这就是发明Unicode消除的那种麻烦。