Как рекурсивно перебрать сообщение Protobuf Python, чтобы найти все поля - PullRequest
0 голосов
/ 24 февраля 2020

Вот как я это сделал, есть ли собственный способ найти все поля во вложенных сообщениях protobuf;

Это для двухслойного вложенного сообщения

for field in mes2.DESCRIPTOR.fields:
  if 'fields' in dir(field.message_type):
    for sub_field in field.message_type.fields:
      print(sub_field)  

1 Ответ

0 голосов
/ 24 февраля 2020

Вы имеете в виду это?

message = [1, 7, {3: "tsdf", "y": (4, 7)}, [4, 8, 'w']]

def print_fields(message):
    if type(message) not in (list, tuple, dict, set):
        return
    for i in message:
        if type(i) in (list, tuple, dict, set):
            print_fields(i)
        else:
            print(i)

# -> 1, 7, 3, 'y', 4, 8, 'w'
...