Pythonでトップレベルのprotobuf列挙値の名前を番号で取得するにはどうすればいいですか? 質問する

Pythonでトップレベルのprotobuf列挙値の名前を番号で取得するにはどうすればいいですか? 質問する

たとえば、次のような proto-file がありますFile.proto:

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

File_pb2.pyprotoc でファイルを生成しますFile.proto。Python コードで、File_pb2.py独自の辞書を定義せずに、生成されたファイルから文字列 "ONE" (File_pb2.ONE の名前に対応) を値 1 (File_pb2.ONE の値に対応) で取得したいです。どうすればできますか?

ベストアンサー1

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

おすすめ記事