matlab - Matlab & HDF5:写入的字符串属性具有 b'string' 格式
问题描述
我正在使用带有字符串属性的 hdf5 结构。我通常用python写数据,没有问题。现在我需要从 matlab 编写相同的结构。
对于我使用 h5writeatt() 的属性,例如:
h5writeatt(filepath, dataset, 'myattr', 'mystringvalue');
当我使用 h5py 从 python 读取属性时,所有属性都以格式返回
值 = b'mystringvalue'
任何想法为什么matlab使用这种格式以及如何禁用它?我正在做的字符串比较失败了,因为 b 和 ' 是字符串的一部分。当然,编写一个小函数来检查这种格式并删除它并不难,但似乎是不必要的开销。
谢谢你的帮助
解决方案
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 就是为了消除这种令人头疼的问题。
推荐阅读
- android-studio - 错误:清单合并失败:属性 application@appComponentFactory
- java - 为什么 Eclipse 忽略了 .project 文件?
- java - 在我的测试中重复相同的测试用例
- ios - 将应用程序移至后台,调用 viewDidLayoutSubView 并使用 UICollectionView 创建大量警告
- cron - 每小时的第一分钟运行 cron 作业
- android - 相对布局中图像按钮的奇怪行为
- bash - 如何存档旧的 git 标签并将我的更改推送到原点?
- javascript - 我可以在反应中获取元素内特定 CSS 属性的值吗?
- r - 在列表矩阵上应用索引命令
- android - 如何在类中设置自定义 textStyle?