谷歌的开源项目protobuf,官方支持四种语言版本,C++、Java、Go、Python,使用protobuf的诸多优点就不多介绍了,在我之前的博客中使用过C++版本的protobuf,如果有兴趣可以参考,这里提供python版protobuf的使用方法,博主在学习caffe,将protobuf数据存为hdf5格式,于是protobuf就也成了C++和python数据交互的接口了,好,我们开始吧!
一、安装注意事项
博主在windows和ubuntu上使用python,由于其中一些差异耗费了不少时间,这里细说一二:
1. 使用python2,如果你坚持使用python3请按照这篇博客修改代码,否则生成的python代码无法使用
2. windows下使用源码安装时注意读readme,先安装ez_setup.py,最好不要pip安装,如果安装过程如果出现包未导入等,检查setup.py代码
3. install完成之后,将google文件夹拷贝到 PythonXX\Lib\sit-package\ 目录下,这样以后可以直接import了
二、基本使用方法
关于python版protobuf的使用方法已经有很多现成的文档了,也有比较优秀的博客,不过,最重要的还是官方文档,并且官方文档足矣。参考官方文档的同时,以下几点请务必小心:
1. 在读取和写入proto文件时,官方网站上的例子都是二进制格式,比如 PhaseFromString 等,读取的是二进制格式,也就是说,我们不能拿文本文件来都(不理解这一点的看Caffe关于读写proto时io.hpp给了两个api,一个是二进制格式,另一个是文本格式)
2. python生成的代码中,并不能直接看到类,初探竟然找不到class,也找不到成员变量,这和其它语言版本的protobuf有很大不同,在python版本中是调用类元来创建这个类,可以从传入的参数descriptor看出创建类的详细属性,我们需要调用方法来创建这个类,然后进行操作,所以找不到类的成员和方法请不要奇怪,写代码时还没有创建呢