2024年Python最新python之protobuf使用案例_python protobuf 使用案例(2)

protobuf是python在自带的一个软件, 用 conda install protobuf 安装就可以
用pip show protobuf 查看是否安装成功

如果: protoc --version 命令找不到指定文件参考如下链接设置:
https://www.cnblogs.com/oracleloyal/p/5485432.html

主要是在profile文件中增加如下配置
export PATH=$PATH:/root/anaconda3/bin
export PKG_CONFIG_PATH=/root/anaconda3/lib/pkgconfig

1. 配置.proto 文件, 大概格式如下:

(1)对象定义的话,都是message 开始, 这种在py文件中调用时,需要先初始化添加对象,
address_book = addressbook_pb2.AddressBook() ## 添加对象
person = address_book.people.add() ## 添加一个对象的主题

(2)格式:所有的数据都定义在一个message里面,数据的类型可以是bool,int32,float,double,string类型,也可以是枚举类型(enum),
定义数据前必须指定限制字required,optional,或repeated

2. #message 定义案例


   //specify the proto version
    syntax = "proto2";    // 注意这里用的是2, 如果是3个话,好像optional 这个明明有问题
    //the name(or empty)
    package tutorial;

    message Person {
      required string name = 1;     //后面的1,2,3 表示字段的位置
      required int32 id = 2;
      optional string email = 3;

      enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
      }

      message PhoneNumber {
        required string number = 1;
        optional PhoneType type = 2 [default = HOME];
      }

      repeated PhoneNumber phones = 4;   //repeate 类似数组,里面可以存放多个PhoneNumber 可自定义类型
    }

    message AddressBook {
      repeated Person people = 1;
    }

3. 生成python 协议文件.py格式

  protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto
   其中: $SRC_DIR 表示.proto存放的路径
         $DST_DIR表示生成的.py协议文件所在的路径
   如:protoc -I=./ --python_out=./ ./addressbook.proto    ## ./表示当前路径

4. 利用协议文件尽心格式转换

#序列化
#stuff_serial = stuff1.SerializeToString()
#反序列化
#stuff_unserial =stuff1.ParseFromString()

   ## 序列化数据,生成序列化文件
   import addressbook_pb2
    import sys

    address_book = addressbook_pb2.AddressBook()  ## 添加对象


### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
Python Protobuf 是一个用于序列化结构化数据的库,它使用 Protocol Buffers 格式来定义数据结构和消息格式。下面是使用 Python Protobuf 的一些基本步骤: 1. 安装 protobuf 库: ``` pip install protobuf ``` 2. 定义消息格式: 首先,创建一个 `.proto` 文件来定义数据结构和消息格式。例如,创建一个名为 `person.proto` 的文件,内容如下: ```protobuf syntax = "proto3"; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } ``` 上述代码定义了一个 `Person` 消息,包含 `name`、`age` 和 `hobbies` 字段。 3. 编译 `.proto` 文件: 使用 `protoc` 命令将 `.proto` 文件编译成 Python 代码。在命令行中运行以下命令: ``` protoc -I=. --python_out=. person.proto ``` 这将在当前目录生成一个 `person_pb2.py` 的文件,用于在 Python 中操作 `Person` 消息。 4. 使用 Protobuf 消息: 在 Python使用编译生成的代码来创建和操作 Protobuf 消息。下面是一个示例: ```python import person_pb2 # 创建一个 Person 实例 person = person_pb2.Person() person.name = "Alice" person.age = 25 person.hobbies.extend(["reading", "swimming"]) # 将消息序列化为字节串 serialized_data = person.SerializeToString() # 反序列化字节串并访问消息字段 deserialized_person = person_pb2.Person() deserialized_person.ParseFromString(serialized_data) print(deserialized_person.name) # 输出: Alice print(deserialized_person.age) # 输出: 25 print(deserialized_person.hobbies) # 输出: ['reading', 'swimming'] ``` 以上代码演示了创建、序列化和反序列化以及访问 Protobuf 消息的基本操作。 这只是 Python Protobuf 的基本用法,更多高级功能和选项可以参考 Protobuf 文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值