如何在 python 中通过数字获得顶级的 Protobuf 枚举值名称?

例如,我有原始文件 File.proto:

enum Test {
ONE = 1;
TWO = 2;
}

我使用来自 File.proto的协议生成文件 File_pb2.py。 我想在一个 python-code 获取字符串“ ONE”(对应于 File _ pb2的名称)。值1(对应于 File _ pb2的值)。ONE)从生成的文件 File_pb2.py没有定义自己的字典。我该怎么做?

65421 次浏览

假设生成的 python 位于 File _ pb2.py 代码中,请尝试这样做:

file_pb2._TEST.values_by_number[1].name

在您的情况下,这应该给 'ONE'

反过来就是:

file_pb2._TEST.values_by_name['ONE'].number

会给 1

编辑: 正如@dyoo 在评论中正确指出的那样,一种新的方法后来被引入到 Protobuf 库中:

file_pb2.Test.Name(1)
file_pb2.Test.Value('One')

编辑: 这在原型3中又改变了。现在 Name ()和 Value ()方法属于 EnumTypeWrapper 类,因此可以像下面这样访问它们:

file_pb2.Name(1)
file_pb2.Value('One')