web-dev-qa-db-ja.com

Pythonで番号でトップレベルのprotobuf列挙値の名前を取得する方法は?

たとえば、プロトタイプファイルFile.proto

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

ファイルを生成しますFile_pb2.pyからのプロトコル付きFile.proto。 python-codeで、生成されたファイルFile_pb2.py自分の辞書を定義せずに。どうやってやるの?

30
abyss.7

生成された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')

編集:これはproto3で再び変更されました。現在、Name()およびValue()メソッドはEnumTypeWrapperクラスに属しているため、次のようにアクセスできます。

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