`
hzy3774
  • 浏览: 993112 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

ProtoBuf与Python结合使用初步

 
阅读更多

Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++JAVAPython等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。

Protocol Buffers经常被简称为protobuf。

GitHub地址:https://github.com/google/protobuf

谷歌官方文档:https://developers.google.com/protocol-buffers/

 

安装方法:现在GitHub上下载Release的Python版本,我使用Ubuntu系统,解压后执行安装命令:

$ ./configure
$ make
$ sudo make install

 

安装后测试protoc命令,该程序用于把proto文件翻译成目标代码:

$ protoc --version
$ libprotoc 3.0.0

 

安装完后需要安装python支持,我采用pip安装:

$ sudo pip install --upgrade protobuf

 这样就可以了。

 

然后编写一个最简单的proto文件:test_proto.proto

syntax = "proto2";
message Person {

}

 

相当于定义了一个结构Person,但是没有任何成员,使用编译命令把它转成python代码:

$ protoc --python_out=./ ./test_proto.proto

 

自动生成了一个test_proto_pb2.py

# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_proto.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='test_proto.proto',
  package='',
  syntax='proto2',
  serialized_pb=_b('\n\x10test_proto.proto\"\x08\n\x06Person')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)




_PERSON = _descriptor.Descriptor(
  name='Person',
  full_name='Person',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto2',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=20,
  serialized_end=28,
)

DESCRIPTOR.message_types_by_name['Person'] = _PERSON

Person = _reflection.GeneratedProtocolMessageType('Person', (_message.Message,), dict(
  DESCRIPTOR = _PERSON,
  __module__ = 'test_proto_pb2'
  # @@protoc_insertion_point(class_scope:Person)
  ))
_sym_db.RegisterMessage(Person)


# @@protoc_insertion_point(module_scope)

 

然而我们使用的时候不用关心这个文件,修改.proto文件,重新编译即可。

在test_proto.proto中加个变量试试:

syntax = "proto2";
message Person {
    required string name = 1;
}

 

编译以后,生成的代码和上一版本做个比较:


主要就是在fields里增加了内容。

 

有了fields,我们就可以用来存数据了,主要使用SerializeToString()和ParseFromString()来序列化和反序列化数据结构,最简单的示例:

 

from test_proto_pb2 import Person

FILE_PATH = './my_person.raw'


def write_test():
    person = Person()
    person.name = 'my name is hello world!!!'
    f = open(FILE_PATH, "wb")
    f.write(person.SerializeToString())
    f.close()


def read_test():
    person = Person()
    f = open(FILE_PATH, "rb")
    person.ParseFromString(f.read())
    f.close()
    print person.name


if __name__ == "__main__":
    write_test()
    read_test()

 

Protocol Buffer协议可以用来将数据存文件,当然主要用于网络传输数据,采用二进制的形式传输不易被破解,还节省流量,因为几乎没有可读性。

  • 大小: 125.7 KB
分享到:
评论

相关推荐

    protobuf-python-3.17.0

    Protobuf 在 Python 中的使用可以让开发者在 Python 项目中方便地处理结构化数据,尤其是在需要与其他语言(如 C++ 或 Java)交互的时候,因为 Protobuf 支持多种编程语言。 在压缩包内的文件名 "protobuf-python-...

    protobuf-python-3.8.0.tar.gz

    这个压缩包的用途在于,如果你的项目需要使用 Protobuf 与 Python 进行数据交互,可以直接导入这个库,避免自行下载和编译,从而节省时间和资源。在实际使用时,你需要根据自己的需求编写 .proto 文件,然后使用 ...

    protobuf-python-3.4.0.zip

    在Python中使用protobuf,可以极大地提高数据交换的效率和可维护性。 protobuf的核心概念包括消息类型定义、编译器和序列化/反序列化机制。首先,你需要定义.proto文件,这是一种文本格式,用于描述数据结构。例如...

    protobuf-python-3.17.3

    开发者可以使用protobuf编译器将.proto文件转换为Python等语言的源代码,这些源代码提供了方便的数据序列化和反序列化API。这使得不同系统间交换数据变得更加便捷,因为它们都可以使用protobuf编译器生成的代码来...

    protobuf-for-with-python

    标题“protobuf-for-with-python”指的是将Protocol Buffers(通常简称为Protobuf)与Python编程语言结合使用的主题。Protocol Buffers是Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成能够在...

    protobuf-python-3.6.1

    官方protobuf所有都在,如果后面更新了版本,只需要更改后的v.几版本,前面的版本都可以下载,这里是最新的。面向python。 对于很多不能访问Google,这个要方便多了。不过网速很慢,给大家提供下载

    protobuf python lib

    标题 "protobuf python lib" 暗示我们讨论的是Google的Protocol Buffers(简称protobuf)在Python中的使用。Protocol Buffers是一种高效的数据序列化协议,它允许开发者定义数据结构,然后生成能够在各种数据平台上...

    google protobuf socket python example

    使用google protobuf通过TCP传输文件

    protobuf-python-3.5.1

    5. 与其他语言的交互:Protobuf 不仅限于 Python,还可以与 Java 和 C++ 等语言的代码无缝交互。这意味着,即使你的后端使用 Java 编写,前端使用 Python,通过 Protobuf 定义的数据格式,两者间的数据交换也会变得...

    python开发一个解析protobuf文件的简单编译器

    最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便。乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用。 ply使用 简介 如果你不是从事...

    tensorflow object detection protobuf文件转的python文件

    protobuf文件(通常扩展名为`.proto`)使用特定的语法来定义数据结构,而`protoc`则会根据这些定义生成对应编程语言(如Python)的类和方法。在TensorFlow Object Detection API中,这些转换后的Python文件主要用于...

    protobuf-python-4.21.8.tar.gz

    4. **安装与使用protobuf:** - **安装**:可以通过pip安装protobuf,命令通常是`pip install protobuf`。 - **定义消息类型**:编写.proto文件,定义所需的结构。 - **生成Python代码**:运行protoc编译器,将....

    实现protobuf和json互相转换python3源码

    与XML和JSON相比,protobuf具有更高的压缩效率和传输速度,同时占用更少的内存。 本主题关注的是在Python3环境中如何实现protobuf和JSON之间的互相转换。首先,我们需要安装`protobuf`库,可以通过pip进行安装: `...

    protobuf-python-3.11.2.tar.gz

    protobuf-python-3.11.2.tar.gz是一个包含Python接口的Protocol Buffers(简称protobuf)库的压缩包,版本号为3.11.2。...在安装和使用时,请确保你的Python环境与protobuf版本兼容,并遵循其安装步骤。

    protobuf-python-3.17.3.zip

    Python绑定使得protobuf可以无缝地与Python编程语言交互。 描述中的“delf需要的资源包”表明protobuf-3.17.3可能是用于DELF(Descriptor Efficient Local Feature)项目或库的依赖。DELF是一种基于深度学习的局部...

    python调用protobuf库发送与解释数据实例.rar

    在"python调用protobuf库发送与解释数据实例.rar"这个压缩包中,包含了一系列的Python文件,它们展示了如何在Python环境中使用protobuf库。这些文件有以下几个: 1. `test_pb2.py`:这是一个由protobuf编译器生成的...

    python导出protobuf数据表及类

    现在,我们需要生成Python代码来与protobuf消息类型交互。这可以通过`protoc`命令行工具完成,它通常在protobuf库安装后会一同提供: ```bash protoc --python_out=. person.proto ``` 这将在当前目录下生成一个`...

    python安装protobuf和编译教程和安装包文件_详细好用

    - **RPC服务**:protobuf可以与gRPC结合,用于构建高性能的远程过程调用(RPC)服务。 - **数据存储和检索**:在数据库、日志文件或网络传输中存储和读取结构化数据。 - **序列化和反序列化**:在Python对象和...

    Python库 | protobuf-3.8.0rc1.tar.gz

    Python库的丰富性和易用性使得protobuf在Python生态系统中得到了广泛接纳和使用。 综上所述,protobuf是Google开发的一种强大的数据序列化工具,适用于Python等多种语言,提供高效的数据存储和传输解决方案。通过...

    protobuf 的编译,安装与python命令行配合使用_工具包

    3.proto文件位于\lsw\cmake-3.14.0-win64-x64\bin\protobuf-build\Release\from,生成目标目录位于:\lsw\cmake-3.14.0-win64-x64\bin\protobuf-build\Release\to 3.cmd进入protoc.exe所在目录,执行"protoc.exe -I=...

Global site tag (gtag.js) - Google Analytics