协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中
Posted
技术标签:
【中文标题】协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中【英文标题】:Protocol Buffer - merge binary data files with the same .proto file to the one file 【发布时间】:2015-02-13 10:15:26 【问题描述】:我有很多根据协议缓冲区的 .proto 方案创建的二进制结构的数据文件(几乎 150 个)。有没有有效的解决方案如何将所有文件合并为一个大的二进制数据文件而不丢失任何信息?
【问题讨论】:
你有方案吗? 是的,我有计划。 【参考方案1】:如果您的方案允许,您可以合并现有数据。
方案
message People
repeated Person person = 1;
message Person
required int32 id = 1;
required string name = 2;
optional string email = 3;
现有数据
两个现有的二进制文件,每个都包含一个Person
。
person1.bin
person2.bin
Python 代码
import p_pb2
people = p_pb2.People()
people.person.add().ParseFromString(open("person1.bin", "rb").read())
people.person.add().ParseFromString(open("person2.bin", "rb").read())
with open("people.bin", "wb") as o:
o.write(people.SerializeToString())
组合数据
现在文件people.bin
包含一个People
实例,包括两个Person
实例。
【讨论】:
非常感谢!我一定会尽快尝试的!不过还是有道理的。 不幸的是,我发现原始模式没有任何包装类(文件非常大,不可能将每一行都存储在一个包装类中),所以它被加密为 BASE64 和由新行分隔。由于这种格式,很容易合并我想要合并的文件。只需附加这些文件。无论如何感谢您的建议!以上是关于协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中的主要内容,如果未能解决你的问题,请参考以下文章