协议缓冲区-将具有相同.proto文件的二进制数据文件合并为一个文件



我有很多二进制结构的数据文件(几乎150个)是根据Protocol Buffer的.proto方案创建的。有什么有效的解决方案可以在不丢失任何信息的情况下将所有文件合并为一个大的二进制数据文件吗?

如果您的方案允许,您可以合并现有数据。

该方案

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实例。

多亏了@Likor,我可以使用cat proto1.bin proto1.bin > combined_proto.bin组合二进制文件,然后将二进制文件反序列化为字符串。

最新更新