日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf

發布時間:2025/3/21 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Protobuf是Google開發的序列化結構數據的一套工具,適合用于數據存儲,以及不同語言不同應用之間進行通信的數據交換格式。目前Google提供了C++,Python,Java,Go等語言的支持。

Protobuf的安裝

在Protobuf的github主頁上,google/protobuf,可以找到不同語言的安裝方法。

定義Protobuf格式

syntax = "proto3";// package 在python中沒用,但是在其他語言的工程中可以避免命名沖突package tutorial;import "google/protobuf/timestamp.proto";// [START messages]// message 是包含多個值的集合,支持bool,int32,float,double,string等message Person { /** =1,=2,是每個值唯一對應的tag* 1-15因為使用少于1 byte,通常用來表示repeated的值* >16的數用來表示其他值*/ string name = 1; int32 id = 2; // Unique ID number for this person. string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { string number = 1; PhoneType type = 2; } /** 每個值都需要一個標記,有三種類型的標記* required: 必須賦值,否則會出現未初始化的錯誤* optional: 可以賦值,可以為空,賦默認值* repeated: 賦任意個數的值*/ repeated PhoneNumber phones = 4; google.protobuf.Timestamp last_updated = 5;}// Our address book file is just one of these.message AddressBook { repeated Person people = 1;}// [END messages]

定義好protobuf的格式之后,就需要編譯,得到讀寫該protobuf的類文件。

protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto

編譯之后將會生成 addressbook_pb2.py。

Protobuf的使用:寫信息

#! /usr/bin/env python# 根據提示,用戶輸入address信息,然后寫入AddressBook中。import addressbook_pb2import systry: raw_input # Python 2except NameError: raw_input = input # Python 3# This function fills in a Person message based on user input.def PromptForAddress(person): person.id = int(raw_input("Enter person ID number: ")) person.name = raw_input("Enter name: ") email = raw_input("Enter email address (blank for none): ") if email != "": person.email = email while True: number = raw_input("Enter a phone number (or leave blank to finish): ") if number == "": break phone_number = person.phones.add() phone_number.number = number type = raw_input("Is this a mobile, home, or work phone? ") if type == "mobile": phone_number.type = addressbook_pb2.Person.MOBILE elif type == "home": phone_number.type = addressbook_pb2.Person.HOME elif type == "work": phone_number.type = addressbook_pb2.Person.WORK else: print("Unknown phone type; leaving as default value.")# Main procedure: Reads the entire address book from a file,# adds one person based on user input, then writes it back out to the same# file.if len(sys.argv) != 2: print("Usage:", sys.argv[0], "ADDRESS_BOOK_FILE") sys.exit(-1)address_book = addressbook_pb2.AddressBook()# Read the existing address book.try: with open(sys.argv[1], "rb") as f: address_book.ParseFromString(f.read())except IOError: print(sys.argv[1] + ": File not found. Creating a new file.")# Add an address.PromptForAddress(address_book.people.add())# Write the new address book back to disk.# SerializeToString 用來序列化message,并返回PB化之后的二進制string值。with open(sys.argv[1], "wb") as f: f.write(address_book.SerializeToString())

調用該python文件, 進行符合protobuf格式的數據輸入,例如

$ python add_person.py address_book_test

Enter person ID number: 123

Enter name: test

Enter email address (blank for none): test@google.com

Enter a phone number (or leave blank to finish): 0001112222

Is this a mobile, home, or work phone? work

Enter a phone number (or leave blank to finish): 1110003333

Is this a mobile, home, or work phone? work

Enter a phone number (or leave blank to finish):

然后將會生成一個 address_book_test 的PB化后的二進制文件,類似

test{test@google.com"

0001112222"

1110003333

Protobuf的使用:讀信息

讀信息,也叫做解析PB化的數據。

#! /usr/bin/env pythonfrom __future__ import print_functionimport addressbook_pb2import sys# Iterates though all people in the AddressBook and prints info about them.def ListPeople(address_book): for person in address_book.people: print("Person ID:", person.id) print(" Name:", person.name) if person.email != "": print(" E-mail address:", person.email) for phone_number in person.phones: if phone_number.type == addressbook_pb2.Person.MOBILE: print(" Mobile phone #:", end=" ") elif phone_number.type == addressbook_pb2.Person.HOME: print(" Home phone #:", end=" ") elif phone_number.type == addressbook_pb2.Person.WORK: print(" Work phone #:", end=" ") print(phone_number.number)# Main procedure: Reads the entire address book from a file and prints all# the information inside.if len(sys.argv) != 2: print("Usage:", sys.argv[0], "ADDRESS_BOOK_FILE") sys.exit(-1)address_book = addressbook_pb2.AddressBook()# Read the existing address book.with open(sys.argv[1], "rb") as f: address_book.ParseFromString(f.read())ListPeople(address_book)

輸出結果類似于

Person ID: 123

Name: test

E-mail address: test@google.com

Work phone #: 0001112222

Work phone #: 1110003333

Message常用的方法:IsInitialized(): 檢查所有required的值是否已經賦值

_str_(): 用于debug,返回人類可讀的數據

CopyFrom(other_msg): 根據已知message對新message賦值

Clear(): 將所有元素清空

SerializedToString(): 將message數據進行序列化,返回PB化之后的二進制string

ParseFromString(): 將二進制string,解析PB數據,返回message數據

總結

以上是生活随笔為你收集整理的pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码人妻精品一区二区三区不卡 | 日韩aaaaa | 精品人妻无码一区二区色欲产成人 | 免费看黄在线看 | 精品人妻一区二区三区四区久久 | 色倩网站 | 屁股夹体温计调教play | 日韩大片免费观看视频播放 | 国产乱妇无码大片在线观看 | 美女视屏 | 黄色精品一区二区 | 久久偷看各类wc女厕嘘嘘偷窃 | 久久久久久网 | 成人免费在线网站 | 亚洲福利在线观看 | a视频网站| 欧美日韩一区二区视频在线观看 | 久久99精品国产91久久来源 | 欧美成人tv| 中文字幕久久久久久久 | 午夜神马影院 | 青草视频污| 精品无码黑人又粗又大又长 | 国产98在线 | 我们的2018在线观看免费高清 | 91网址入口| 国产一区二区三区视频免费在线观看 | 日韩一区二区在线看 | 亚洲精品久久久久久宅男 | 无码人妻黑人中文字幕 | 99精品久久 | 国产日韩欧美自拍 | 国产综合图区 | 国产三级午夜理伦三级 | 青娱乐精品视频 | 琪琪射 | 亚洲一区二区三区av无码 | 狠狠操一区 | 国产精品夫妻 | 蜜桃成熟时李丽珍国语 | 女人下部全棵看视频 | 精品福利三区3d卡通动漫 | 美女隐私无遮挡网站 | 国产91丝袜 | 久久伊人免费 | 亚洲一区免费看 | 午夜福利一区二区三区 | 久久9966 | 国产精品一 | 91尤物国产福利在线观看 | 91国产网站 | 国产视频精品自拍 | 国产对白在线 | 久热精品在线视频 | 日韩综合网| 操人小视频 | 日日摸天天爽天天爽视频 | 国产成人精品久久二区二区 | 国产精品久久久久久亚洲色 | 久久一久久 | 美国美女黄色片 | 色图社区| 超碰在线观看免费版 | 精品亚洲国产成人av制服丝袜 | 精品视频在线观看 | 夜夜嗨av| 日韩精品一区二区三区久久 | 激情四月| 欧美一级日韩 | 国产精品一区三区 | 又色又爽又黄gif动态图 | 久久免费国产视频 | 国产成人一区在线观看 | 亚洲国产一区二区在线观看 | 欧美综合自拍亚洲综合图片区 | 国产精品69久久久久 | 免费看a | 四虎视频在线观看 | 亚洲精品123区 | 久久精品亚洲一区二区 | 欧美第三页 | 伊久久| 国产91亚洲| 日本少妇在线 | 国产一二三视频 | 激情999| 国产农村妇女精品一区 | 殴美一区二区 | 日韩激情网 | 中文字幕91在线 | 成年人在线免费观看视频网站 | 免费 成 人 黄 色 | 西西午夜影院 | 日少妇av | 国产不卡视频在线播放 | 久久久天堂国产精品女人 | 九九五月天 | 51国产偷自视频区视频 | 久色免费视频 |