Сериализация данных с помощью Google Protobuf в Python - PullRequest
1 голос
/ 02 марта 2020

У меня есть текстовый файл с содержимым, похожим на это (формат):

Alice:ECE505,56:HIS230,78:REC345,98
Bob:MATH300,78:IN121,79:LEC091,23:ARC,32:WER720,67

Я хотел бы добавить имя каждого класса и оценку его перспективному лицу. Пока у меня есть что-то вроде этого:

all_stu = record_pb2.Result()
person = all_stu.student.add()
cl = person.courses.add()

with open(textfile, "r") as readfile:
    txt = readfile.read()
    for line in txt.split('\n'):
        segment = line.split(':')
        person.name = segment[0]

        classes = segment[1:]

        #I have tried this but it only returns the last class and score 
        for c in classes:
            cname, score = c.split(',')
            cl.name = cname
            cl.score = score

Я знаю, что мой l oop возвращает только имя и оценку последнего класса, но как мне сохранить каждый класс и оценки для соответствующего человека / строки с Google Protobuf? Заранее спасибо!

1 Ответ

0 голосов
/ 02 марта 2020

Вы забыли добавить каждого человека, которого вы читали из файла. Затем вам нужно добавить каждый найденный вами класс в объекте person. Теперь вы создаете эти объекты только один раз и, таким образом, все время перезаписываете их.

all_stu = record_pb2.Result()
person = all_stu.student.add()

with open(textfile, "r") as readfile:
    txt = readfile.read()
    for line in txt.split('\n'):
        segment = line.split(':')

        person = all_stu.student.add()
        person.name = segment[0]

        classes = segment[1:]

        #I have tried this but it only returns the last class and score 
        for c in classes:
            cl = person.courses.add()
            cname, score = c.split(',')
            cl.name = cname
            cl.score = score

Здесь я предполагаю, что курсы - это повторяющееся поле.

...