2012-07-16 12 views
20

, bir proto-dosyasını File.proto sahiptir. Kendi sözlüklerimi tanımlamadan, oluşturulan bir dosyadan File_pb2.py numaralı dosyadan 1 değerine (bu File_pb2.ONE değerine karşılık gelen) bir "ONE" (File_pb2.ONE adına karşılık gelir) dizesini istiyorum. Bunu nasıl yapabilirim? oluşturulan piton varsayarsakPython'da en üst düzey protobuf enum değer adı nasıl alınır? <code>File.proto</code> gelen Protoc ile</p> <pre><code>enum Test { ONE = 1; TWO = 2; } </code></pre> <p>I oluşturmak dosya <code>File_pb2.py</code>: Örneğin

+0

oluşturulan 'File_pb2.py'' sına ilişkin kodu için, neye benzer? –

+0

@MarcGravell 'File_pb2.py''in görünümü genellikle protok versiyona bağlıdır. Soru, cevabın _standart protobuf python API_ ile ilgili olduğunu belirtmektedir, çünkü cevabı kendim herhangi bir yerde bulamıyorum. Örneğin, ilgili sorun için https://groups.google.com/forum/?fromgroups#!topic/protobuf/HRApuLNyYVQ –

cevap

27

File_pb2.py kodunda bulunan bu deneyin:

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

verecektir:

Senin durumunda
file_pb2._TEST.values_by_number[1].name 

, bu tersidir 'ONE'

vermelidir 1.

DÜZENLEME: As doğru yorumlarda @dyoo tarafından işaret yeni bir yöntem daha sonra protobuf kütüphanede tanıtıldı:

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

DÜZENLEME: Bu proto3 tekrar değişti. Şimdi İsim() ve Değer() yöntemleri onlar gibi ulaşılabilir böylece EnumTypeWrapper sınıfa aittir:

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

bir çekicilik gibi çalışır. Teşekkürler. –

+3

Bu düşük seviyeli görünüyor; Bunu daha doğrudan almak için numaralandırma sınıfındaki 'Name()' yöntemini kullanabilmeniz gerekir. Örneğin. 'file_pb2.Test.Name (1)' de size "ONE" vermelidir. Bu, https://code.google.com/p/protobuf/source/browse/trunk/python/google/protobuf/internal/enum_type_wrapper.py?r=425 – dyoo

+0

@dyoo'nun bir parçası değil. Cevabı yazdığım anda Name() yöntemi (Jul 16 '12). Başvurduğunuz dosya 21 Eylül '12 oluşturuldu. Neyse, yorum için teşekkürler, ben cevapta ekleyeceğim. – Tisho

İlgili konular