我正在使用具有字符串属性的hdf5结构。我通常用python编写数据,没有问题。现在我需要从matlab编写相同的结构。
对于属性,我正在使用h5writeatt(),例如:
h5writeatt(filepath, dataset, 'myattr', 'mystringvalue');
当我使用h5py从python读取属性时,所有属性都以
格式返回value = b'mystringvalue'
任何想法为何matlab使用此格式以及如何禁用它?我正在做字符串比较,因为b和'是字符串的一部分,所以失败了ofc。当然,编写一个小的函数来检查这种格式并将其删除并不困难,但似乎没有必要的开销。
感谢您的帮助
答案 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消除的那种麻烦。