欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在mac環(huán)境中用python處理protobuf

 更新時間:2019年12月25日 09:34:35   作者:公眾號python學習開發(fā)  
這篇文章主要介紹了如何在mac環(huán)境中用python處理protobuf,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了如何在mac環(huán)境中用python處理protobuf,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

安裝

brew install protobuf

然后再安裝protobuf需要的依賴

brew install autoconf automake libtool

驗證是否安裝成功

protoc –version

protobuf3語法介紹

1.字段前取消了required和optional兩個關鍵字,目前可用的只有repeated關鍵字。

2.不可以現(xiàn)設置默認值了。

  a.string默認為空串

  b.枚舉默認為第一個枚舉定義的第一個值。并且必須是0,必須有有一個0值,我們可以用這個0值作為默認值。
這個零值必須為第一個元素,為了兼容proto2語義,枚舉類的第一個值總是默認值。

  c.bytes默認為空bytes

  d.bool默認為false

  e.數字類型默認為0

3.protoType類型如下:

double、float、int32、int64、uint32、uint64、sint32、sint64、fixed32、fixed64、sfixed32、sfixed64、bool、string、bytes

4、分配標識號

正如你所見,在消息定義中,每個字段都有唯一的一個數字標識符。這些標識符是用來在消息的二進制格式中識別各個字段的,一旦開始使用就不能夠再改變。注:[1,15]之內的標識號在編碼的時候會占用一個字節(jié)。[16,2047]之內的標識號則占用2個字節(jié)。所以應該為那些頻繁出現(xiàn)的消息元素保留 [1,15]之內的標識號。切記:要為將來有可能添加的、頻繁出現(xiàn)的標識號預留一些標識號。

最小的標識號可以從1開始,最大到2^29 - 1, or 536,870,911。不可以使用其中的[19000-19999]( (從FieldDescriptor::kFirstReservedNumber 到 FieldDescriptor::kLastReservedNumber))的標識號, Protobuf協(xié)議實現(xiàn)中對這些進行了預留。如果非要在.proto文件中使用這些預留標識號,編譯時就會報警。同樣你也不能使用早期保留的標識號。

指定字段規(guī)則

所指定的消息字段修飾符必須是如下之一:

  • singular:一個格式良好的消息應該有0個或者1個這種字段(但是不能超過1個)。
  • repeated:在一個格式良好的消息中,這種字段可以重復任意多次(包括0次)。重復的值的順序會被保留。

在proto3中,repeated的標量域默認情況蝦使用packed。

編寫protoco文件,addressbook.proto。

syntax = "proto3"; //正在使用proto3語法,如果你沒有指定這個,編譯器會使用proto2
package tutorial;

//*.proto文件中數據類型可以分為兩大類:
//復合數據類型包括:枚舉和message類型
//標準數據類型包含:整型,浮點,字符串等

message AddressBook {
 //repeated: 該字段可以重復任意次數,包括0次。重復數據的順序將會保存在protocol buffer中,將這個字段想象成一個可以自動設置size的數組就可以了。
 repeated Person people = 1;
}

message Person {
 //每個字段有一種類型
 //該Number是用來標記該字段在序列化后的二進制數據中所在的field,
 //每個字段的Number在message內部都是獨一無二的。也不能進行改變,否則數據就不能正確的解包
 string name = 1;
 int32 id = 2;
 string email = 3;
 float money =4;
 bool work_status = 5;
 repeated PhoneNumber phones =6;
 MyMessage maps =7;
}
message PhoneNumber{
   string number =1;
   PhoneType type =2;
}

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

}

message MyMessage{
  map<int32,int32> mapfield =1;
}

編譯生成python代碼

protoc ./addressbook.proto --python_out=./ 

創(chuàng)建一個解析文件

protobufdemo.py

# -*- coding: utf-8 -*-
# @Time : 2019-11-15 11:25
# @Author : cxa
# @File : protobufdemo.py
# @Software: PyCharm
import addressbook_pb2

address_book = addressbook_pb2.AddressBook()
person = address_book.people.add()
person.id = 1
person.name = "cxa"
person.email = "1@qq.com"
person.money = 1234.00
person.work_status = True

phone_number = person.phones.add()
phone_number.number = "123456"
phone_number.type = addressbook_pb2.MOBILE
maps = person.maps
maps.mapfield[1] = 1
maps.mapfield[2] = 2

# 序列化
serializeTostring = address_book.SerializeToString() # 生成字節(jié)數組
str_result = address_book.ParseFromString(serializeTostring) # 轉為字符串
print(str_result)
for person in address_book.people:
  print(person)

for phone_number in person.phones:
  print(phone_number)

for key in person.maps.mapfield:
  print(key, person.maps.mapfield[key])

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python如何實現(xiàn)文本轉語音

    Python如何實現(xiàn)文本轉語音

    文本轉語音,一般會用在無障礙開發(fā)。下面介紹如何使用Python實現(xiàn)將文本文件轉換成語音輸出。跟著小編一起來看看吧。
    2016-08-08
  • python機器學習pytorch?張量基礎教程

    python機器學習pytorch?張量基礎教程

    這篇文章主要為大家介紹了python機器學習pytorch?張量基礎教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • python實現(xiàn)簡單銀行管理系統(tǒng)

    python實現(xiàn)簡單銀行管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單銀行管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • matplotlib之pyplot模塊添加文本、注解(text和annotate)

    matplotlib之pyplot模塊添加文本、注解(text和annotate)

    matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地行制圖,下面這篇文章主要給大家介紹了關于matplotlib之pyplot模塊添加文本、注解(text和annotate)的相關資料,需要的朋友可以參考下
    2022-05-05
  • flask路由分模塊管理及自定義restful響應格式詳解

    flask路由分模塊管理及自定義restful響應格式詳解

    這篇文章主要為大家介紹了flask路由分模塊管理及自定義restful響應格式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • pytorch DistributedDataParallel 多卡訓練結果變差的解決方案

    pytorch DistributedDataParallel 多卡訓練結果變差的解決方案

    這篇文章主要介紹了pytorch DistributedDataParallel 多卡訓練結果變差的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python如何獲取網絡數據

    python如何獲取網絡數據

    這篇文章主要介紹了python如何獲取網絡數據,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python裝飾器使用實例:驗證參數合法性

    Python裝飾器使用實例:驗證參數合法性

    這篇文章主要介紹了Python裝飾器使用實例:驗證參數合法性,本文直接給出代碼實例,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-06-06
  • Python?Logistic邏輯回歸算法使用詳解

    Python?Logistic邏輯回歸算法使用詳解

    這篇文章主要介紹了Python?Logistic邏輯回歸算法使用的方法和原理,Logistic雖然不是十大經典算法之一,但卻是數據挖掘中常用的有力算法,所以這里也專門進行了學習,需要的朋友可以參考下
    2021-06-06
  • 如何使用Python打包APK

    如何使用Python打包APK

    這篇文章主要介紹了Linux環(huán)境下的Python打包和部署實踐的相關資料,需要的朋友可以參考下
    2024-02-02

最新評論