python,在python中使用google protocol buffer

今天想要写个python脚本来把我们之前一个项目中使用的gpb格式导出的数据打印出来,由于之前接触python很少,所以基本是从头学起
基本的语法的话我就不说了,我主要记录一下我的几个环境配置
python和ide:
安装了python2.6, editplus. 网上有一篇介绍怎么在editplus中编辑\编译\运行python脚本的文章,照搬就ok了.
gpb:
gpb我算是比较熟悉了,但是之前也只在c++和java中用到,没在python中使用,compiler的用法基本是一样的,指定—python_out的路径就行了,生成的文件打开一看,和java,C++的有很大的区别,具体的可以自己去生成一个试一下,gpb的官方文档中也有详细讲解,我就不多说,我主要说一下这个生成的文件要在python中用起来,还需要把gpb的lib装到python的lib目录下面去,我直接把gpb2.3.0源码目录下python目录中的google目录整个粘贴过去,但是不行,没有效果,import仍然会出错.
然后看了一下README,才只要要运行setup.py,试了一下,还需要在cygwin下面运行,然后就会安装到python的lib目录下面去,再使用就ok了.
python中的用法:
这个实际官方也有文档说明,因为我这里主要是反序列化,所以用ParseFromString方法就行了.我主要想提一点,由于我们序列化输出之后,大多是在网络流或者文件中,那么怎么来获取到我们的pb对应的byte数组呢.略微查了一下python的手册,看到有struct这个类可以使用.比如我们写在文件中格式是 [整型长度][pb字节数组],那么我们读取到的字节数组就可以用struct.unpack_from(“ip”, data)来进行解析,前面的 i 就表示整型长度,后面的 p 就是一个char数组.目前呢,因为写在文件中的数据是上述格式的多个循环,故可采用unpack_from后面多加一个offset参数,进行下一次的解析,不过这部分我还没尝试,至少前面的经过尝试是可以使用的.
Tags:  buffer python

延伸阅读

最新评论

发表评论