Проблемы с рассолом.загрузка с помощью ioobject в режиме «ab»

#python-3.x #pickle

Вопрос:

Я пытаюсь рассолить / распаковать список вершин, но при рассоле я использую режим добавления в объекте файла ввода-вывода, так как я не хочу перебирать весь список, чтобы писать его снова и снова. Представьте, что у меня были бы тысячи вершин.

В моем тесте есть класс вершин (Vertice на испанском языке), а также основной скрипт. Я вставляю код.

 class Vertice:
    def __init__(self, nombre, x, y , cota):
        self.nombre = nombre
        self.x = x
        self.y = y
        self.cota = cota

    def __repr__(self):
        return f"Vertice {self.nombre} de coordenadas ({self.x},{self.y}) y cota {self.cota}"


import pickle

from vertice import Vertice

if __name__ == '__main__':

    lista_vertices = []
    vertices_nuevos = []

    try:
        lector = open(r"C:UsersGabrielDesktopvertices.ver", "rb")
        lista_vertices = pickle.load(lector, fix_imports=True)
        print("Datos cargados desde el fichero")
        lector.close()
        for vertice in lista_vertices:
            print(vertice)

    except pickle.UnpicklingError as ex:
        print("UnpicklingError")
        print(ex)
    except pickle.PickleError as ex:
        print("PickleError")
        print(ex)
    except Exception as ex:
        print("No hay datos que cargar. No existe un fichero de respaldo.")

    introducir_datos = input("¿Desea introducir datos (n = no)?: ")
    while introducir_datos.lower() != "n":
        nombre = input("Introduzca el nombre del vértice: ")
        x = eval(input("Introduzca el nombre de la coordenada x: "))
        y = eval(input("Introduzca el nombre de la coordenada y: "))
        cota = eval(input("Introduzca el nombre de la cota: "))
        nuevo_vertice = Vertice(nombre, x, y, cota)
        lista_vertices.append(nuevo_vertice)
        vertices_nuevos.append(nuevo_vertice)
        introducir_datos = input("¿Desea introducir datos (n = no)?: ")
        print(introducir_datos.lower())


    try:
        añadidor = open(r"C:UsersGabrielDesktopvertices.ver", "ab")
        pickle.dump(vertices_nuevos, añadidor, pickle.HIGHEST_PROTOCOL)
        print("Datos serializados.")
        añadidor.close()
    except pickle.PicklingError as ex:
        print(ex)
    except pickle.PickleError as ex:
        print(ex)
    except Exception as ex:
        print(ex)
        print("No ha sido posible serializar los datos.")
 

К сожалению, я могу добавить первые записи, но при выполнении сценария во второй раз и добавлении новой вершины я вижу, что файл получает новые данные, но невозможно распаковать новые данные, добавленные при следующем выполнении.

Кто-нибудь может подсказать мне, как добавить vertex в файл?

Спасибо, хорошего вам дня !