[英]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.