#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 в файл?
Спасибо, хорошего вам дня !