我最近开始使用protobuf。我遇到了如下问题:
我创建了一个protobuf消息,填写了一些内容,并将文本格式写入磁盘:
f = open('/home/centos/pb.conf','w')
f.write( text_format.MessageToString(c))
现在我尝试从磁盘读出protobuf,回到python对象:
c2=cf.Configure()
input = open('/home/centos/pb.conf','rb')
b = input.read()
text_format.Merge(b, c2)
然后,遗憾的是,我收到了这个错误:
471 return MergeLines(
--> 472 text.split('\n'),
473 message,
474 allow_unknown_extension,
TypeError: a bytes-like object is required, not 'str'
然而,似乎' b'是字节格式:
Out[49]: b'name: "david"\ncar_fe_config {\n name: "style_slow"\n}\nfleet_fe_config {\n name: "style_fast"\n}\n'
发生了什么事?
答案 0 :(得分:0)
这种情况正在发生,因为Merge()
有一个内部方法MergeLines()
,它在换行符("\n"
)的字符串表示形式上进行拆分。如果传入字节表示,则必须在.split(b"\n")
上拆分以避免错误,但拆分器被硬编码为字符串。
尝试将保存的数据作为字符串阅读(例如,使用open(<filename>, 'r')
代替'rb'
),这应该有用。