gpt4 book ai didi

python - 如何获取python3中protobuf的RepeatedCompositeContainer或RepeatedScalarContainer包含的类型?

转载 作者:行者123 更新时间:2023-12-05 01:40:01 30 4
gpt4 key购买 nike

我正在编写一个用于序列化和发送 protobuf3 消息的 Python 应用程序。我想制作某种交互式用户界面,允许选择一条消息并即时分配它。我有一大堆这样的消息,因此我不想为每条消息都创建一个 get 函数,而是创建一个可以处理所有消息的函数。

获取 所有消息字段,我可以简单地获取所有消息的属性并选择那些作为其字段的属性,这很容易。然后,要知道属性是什么类型,我使用 type(getattr(my_message, current_field))。现在有问题了。假设这些是我的消息:

message myMess1 {
//some fields
}

message myMess2 {
string some_string = 1
repeated myMess1 myMess1Field = 2
}

现在,给some_string字段赋值就没有问题了。

type(getattr(myMess2Instance, someStringFieldName)) 返回 string,所以我知道用字符串来喂它。

但是如何处理重复的 myMess1 字段呢?type(getattr(MyMess2Instance, myMess1FieldName)) 实际上返回 google.protobuf.pyext._message.RepeatedCompositeContainer,它没有说明其中包含什么类型。我怎样才能得到它?

最佳答案

我有一个类似的 Protobuf 解析问题,这是我所做的“希望它有帮助”:

假设我们有这个响应消息:

>>> msg
path {
}
path {
value: "Arts & Entertainment"
}
path {
value: "Comics & Animation"
}

将其转换为字典:

>>> from google.protobuf.json_format import MessageToDict
>>> d = MessageToDict(msg)
{'path': ['', 'Arts & Entertainment', 'Comics & Animation']}

将值的字典列表作为字符串加入:

>>> " ".join(d["path"]).strip()
'Arts & Entertainment Comics & Animation'

关于python - 如何获取python3中protobuf的RepeatedCompositeContainer或RepeatedScalarContainer包含的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222346/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com