最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

安裝

brew install protobuf

然后再安裝protobuf需要的依賴

brew install autoconf automake libtool

驗證是否安裝成功

protoc –version

protobuf3語法介紹

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

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

  a.string默認(rèn)為空串

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

  c.bytes默認(rèn)為空bytes

  d.bool默認(rèn)為false

  e.數(shù)字類型默認(rèn)為0

3.protoType類型如下:

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

4、分配標(biāo)識號

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

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

指定字段規(guī)則

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

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

在proto3中,repeated的標(biāo)量域默認(rèn)情況蝦使用packed。

編寫protoco文件,addressbook.proto。

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

//*.proto文件中數(shù)據(jù)類型可以分為兩大類:
//復(fù)合數(shù)據(jù)類型包括:枚舉和message類型
//標(biāo)準(zhǔn)數(shù)據(jù)類型包含:整型,浮點,字符串等

message AddressBook {
 //repeated: 該字段可以重復(fù)任意次數(shù),包括0次。重復(fù)數(shù)據(jù)的順序?qū)4嬖趐rotocol buffer中,將這個字段想象成一個可以自動設(shè)置size的數(shù)組就可以了。
 repeated Person people = 1;
}

message Person {
 //每個字段有一種類型
 //該Number是用來標(biāo)記該字段在序列化后的二進制數(shù)據(jù)中所在的field,
 //每個字段的Number在message內(nèi)部都是獨一無二的。也不能進行改變,否則數(shù)據(jù)就不能正確的解包
 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é)數(shù)組
str_result = address_book.ParseFromString(serializeTostring) # 轉(zhuǎn)為字符串
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])

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python實現(xiàn)自動填入密碼功能

    使用Python實現(xiàn)自動填入密碼功能

    對于頻繁使用的軟件,每次都手動輸入密碼可能會顯得繁瑣,所以本文主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)自動填入密碼功能,需要的可以參考下
    2024-04-04
  • Pygame?transform模塊入門介紹

    Pygame?transform模塊入門介紹

    pygame.transform模塊允許您對加載、創(chuàng)建后的圖像進行一系列操作,比如調(diào)整圖像大小、旋轉(zhuǎn)圖片等操作,感興趣的可以了解一下
    2022-08-08
  • Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    在圖像的任務(wù)中,不管是圖像檢測還是圖像識別,我們都需要通過繪制圖形和繪制文字對處理的結(jié)果進行說明,本篇就詳細(xì)介紹下OpenCV中的圖形的繪制,感興趣的可以了解一下
    2022-01-01
  • Flask response響應(yīng)的具體使用

    Flask response響應(yīng)的具體使用

    在flask中,想要給前端頁面返回數(shù)據(jù),必須是Response的對象,本文介紹了Flask response響應(yīng)的使用,感興趣的可以了解一下
    2021-07-07
  • OpenCV-Python 攝像頭實時檢測人臉代碼實例

    OpenCV-Python 攝像頭實時檢測人臉代碼實例

    這篇文章主要介紹了OpenCV-Python 攝像頭實時檢測人臉,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python Tkinter 簡單登錄界面的實現(xiàn)

    Python Tkinter 簡單登錄界面的實現(xiàn)

    今天小編就為大家分享一篇Python Tkinter 簡單登錄界面的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 三大Python翻譯神器再也不用擔(dān)心學(xué)不好英語

    三大Python翻譯神器再也不用擔(dān)心學(xué)不好英語

    本文介紹了用python做一款屬于自己的翻譯詞典軟件,從此告別網(wǎng)頁搜索,文中有非常詳細(xì)的代碼示例,小伙伴們快快行動吧,需要的朋友可以參考下
    2021-09-09
  • selenium+opencv實現(xiàn)滑塊驗證碼的登陸

    selenium+opencv實現(xiàn)滑塊驗證碼的登陸

    很多網(wǎng)站登錄登陸時都要用到滑塊驗證碼,本文主要介紹了selenium+opencv實現(xiàn)滑塊驗證碼的登陸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Pyramid將models.py文件的內(nèi)容分布到多個文件的方法

    Pyramid將models.py文件的內(nèi)容分布到多個文件的方法

    默認(rèn)的Pyramid代碼結(jié)構(gòu)中,就只有一個models.py文件,在實際項目中,如果需要對models進行分類,放到不同文件下,應(yīng)該怎么辦
    2013-11-11
  • Python使用chardet判斷字符編碼

    Python使用chardet判斷字符編碼

    這篇文章主要介紹了Python使用chardet判斷字符編碼的方法,較為詳細(xì)的分析了Python中chardet的功能、安裝及使用技巧,需要的朋友可以參考下
    2015-05-05

最新評論

稻城县| 长海县| 正安县| 永兴县| 梅河口市| 岳池县| 象州县| 福建省| 新竹县| 庆云县| 天津市| 襄城县| 同仁县| 郴州市| 泾阳县| 托克逊县| 常德市| 双流县| SHOW| 平陆县| 龙泉市| 尼木县| 阳高县| 营口市| 保德县| 桐乡市| 安阳市| 荣昌县| 蒲江县| 牙克石市| 阳山县| 中方县| 双峰县| 微山县| 新昌县| 连城县| 若尔盖县| 新蔡县| 金塔县| 永州市| 舞阳县|