Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。
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协议可以用来将数据存文件,当然主要用于网络传输数据,采用二进制的形式传输不易被破解,还节省流量,因为几乎没有可读性。
相关推荐
Protobuf 在 Python 中的使用可以让开发者在 Python 项目中方便地处理结构化数据,尤其是在需要与其他语言(如 C++ 或 Java)交互的时候,因为 Protobuf 支持多种编程语言。 在压缩包内的文件名 "protobuf-python-...
这个压缩包的用途在于,如果你的项目需要使用 Protobuf 与 Python 进行数据交互,可以直接导入这个库,避免自行下载和编译,从而节省时间和资源。在实际使用时,你需要根据自己的需求编写 .proto 文件,然后使用 ...
在Python中使用protobuf,可以极大地提高数据交换的效率和可维护性。 protobuf的核心概念包括消息类型定义、编译器和序列化/反序列化机制。首先,你需要定义.proto文件,这是一种文本格式,用于描述数据结构。例如...
开发者可以使用protobuf编译器将.proto文件转换为Python等语言的源代码,这些源代码提供了方便的数据序列化和反序列化API。这使得不同系统间交换数据变得更加便捷,因为它们都可以使用protobuf编译器生成的代码来...
标题“protobuf-for-with-python”指的是将Protocol Buffers(通常简称为Protobuf)与Python编程语言结合使用的主题。Protocol Buffers是Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成能够在...
官方protobuf所有都在,如果后面更新了版本,只需要更改后的v.几版本,前面的版本都可以下载,这里是最新的。面向python。 对于很多不能访问Google,这个要方便多了。不过网速很慢,给大家提供下载
标题 "protobuf python lib" 暗示我们讨论的是Google的Protocol Buffers(简称protobuf)在Python中的使用。Protocol Buffers是一种高效的数据序列化协议,它允许开发者定义数据结构,然后生成能够在各种数据平台上...
使用google protobuf通过TCP传输文件
5. 与其他语言的交互:Protobuf 不仅限于 Python,还可以与 Java 和 C++ 等语言的代码无缝交互。这意味着,即使你的后端使用 Java 编写,前端使用 Python,通过 Protobuf 定义的数据格式,两者间的数据交换也会变得...
最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便。乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用。 ply使用 简介 如果你不是从事...
protobuf文件(通常扩展名为`.proto`)使用特定的语法来定义数据结构,而`protoc`则会根据这些定义生成对应编程语言(如Python)的类和方法。在TensorFlow Object Detection API中,这些转换后的Python文件主要用于...
4. **安装与使用protobuf:** - **安装**:可以通过pip安装protobuf,命令通常是`pip install protobuf`。 - **定义消息类型**:编写.proto文件,定义所需的结构。 - **生成Python代码**:运行protoc编译器,将....
与XML和JSON相比,protobuf具有更高的压缩效率和传输速度,同时占用更少的内存。 本主题关注的是在Python3环境中如何实现protobuf和JSON之间的互相转换。首先,我们需要安装`protobuf`库,可以通过pip进行安装: `...
protobuf-python-3.11.2.tar.gz是一个包含Python接口的Protocol Buffers(简称protobuf)库的压缩包,版本号为3.11.2。...在安装和使用时,请确保你的Python环境与protobuf版本兼容,并遵循其安装步骤。
Python绑定使得protobuf可以无缝地与Python编程语言交互。 描述中的“delf需要的资源包”表明protobuf-3.17.3可能是用于DELF(Descriptor Efficient Local Feature)项目或库的依赖。DELF是一种基于深度学习的局部...
在"python调用protobuf库发送与解释数据实例.rar"这个压缩包中,包含了一系列的Python文件,它们展示了如何在Python环境中使用protobuf库。这些文件有以下几个: 1. `test_pb2.py`:这是一个由protobuf编译器生成的...
现在,我们需要生成Python代码来与protobuf消息类型交互。这可以通过`protoc`命令行工具完成,它通常在protobuf库安装后会一同提供: ```bash protoc --python_out=. person.proto ``` 这将在当前目录下生成一个`...
- **RPC服务**:protobuf可以与gRPC结合,用于构建高性能的远程过程调用(RPC)服务。 - **数据存储和检索**:在数据库、日志文件或网络传输中存储和读取结构化数据。 - **序列化和反序列化**:在Python对象和...
Python库的丰富性和易用性使得protobuf在Python生态系统中得到了广泛接纳和使用。 综上所述,protobuf是Google开发的一种强大的数据序列化工具,适用于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=...