簡體   English   中英

使用python替換protobuf文件中的行

[英]Replace lines in a protobuf file using python

我有一個要更改的現有原始文件。 我想做的是讀入文件,更改一個或兩個值,然后將其作為.proto文件寫回到磁盤,以供其他程序讀取。 根據本文檔 ,我應該能夠編寫如下內容:

from google.protobuf import message

msg = message.Message()
msg.ParseFromString(infile.read())

... (make changes)

outfile.write(msg.SerializeToString())

但這只是給我一個NotImplementedError 我需要在哪里與protobuf文本文件接口的庫? 似乎適用於C ++,為什么還沒有為python實現呢? (不,google.protobuf.text_format中的函數也未實現)。

您似乎在這里混淆了幾個不同的概念。

message.Message是一個抽象基類。 您需要構造您感興趣的特定派生類的實例。

.proto文件包含類型定義,而不是消息數據。 你必須編譯.proto使用文件protoc ,該協議編譯器。 它將生成Python代碼,然后可以將其導入到程序中以構造所需的特定類型。 有關詳細信息,請參見Protobuf教程

使用ParseFromString()解析文件中的二進制 protobuf數據,並使用SerializeToString()將消息轉換回二進制數據。 您幾乎應該始終將二進制格式用於protobuf數據。

您引用的TextFormat類實現了人類可讀的protobuf的替代編碼。 在大多數使用情況下, 建議使用此格式。 如果您想要一種人類可讀的格式,使用JSON可能會更好,但是與二進制編碼相比,它總是更慢,更緊湊。 TextFormat有時對於調試(打印消息)很有用,有時對於將消息數據寫為源代碼也很有用。 TextFormat在Python庫中作為text_format模塊提供

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM