¿Cómo actualizar un archivo pickle en Python?

El módulo pickle de Python se utiliza para serializar y deserializar una estructura de objetos de Python. Cualquier objeto en Python se puede decapar para que se pueda guardar en un disco. Lo que hace pickle es que primero «serializa» el objeto antes de escribirlo en el archivo. El decapado es una forma de convertir un objeto de Python (lista, dictado, etc.) en un flujo de caracteres. La idea es que este flujo de caracteres contenga toda la información necesaria para reconstruir el objeto en otro script de python.

Pickle serializa un solo objeto a la vez y vuelve a leer un solo objeto: los datos decapados se registran en secuencia en el archivo. Si simplemente hace pickle.load, estaría leyendo el primer objeto serializado en el archivo (no el último como ha escrito). Después de deserializar el primer objeto, el puntero del archivo se encuentra al comienzo del siguiente objeto; si simplemente llama a pickle.load nuevamente, leerá el siguiente objeto; hágalo hasta el final del archivo.

Funciones utilizadas:

  • load() : se usa para leer una representación de objeto en escabeche del archivo de objeto de archivo abierto y devolver la jerarquía de objeto reconstituida especificada.

Sintaxis:

pickle.load(archivo, *, fix_imports = Verdadero, codificación = “ASCII”, errores = “estricto”)

  • seek (0) : los registros de Pickle se pueden concatenar en un archivo, por lo que sí, puede simplemente pickle.load (f) varias veces, pero los archivos en sí no están indexados de una manera que le permita buscar en un registro determinado. Lo que está haciendo su f.seek(0) es buscar en el tercer byte del archivo, que está en medio de un registro pickle y, por lo tanto, no se puede seleccionar. Si necesita acceso aleatorio, es posible que desee buscar en el módulo de estantería incorporado que crea una interfaz similar a un diccionario sobre un pickle usando un módulo de archivo de base de datos.
  • dump() : se usa para escribir una representación encurtida de obj en el archivo de objeto de archivo abierto

Sintaxis:

pickle.dump(obj, archivo, protocolo = Ninguno, *, fix_imports = Verdadero)

  • truncar() – cambia el tamaño del archivo

Para empezar, primero tenemos que insertarlo en un archivo pickle. La implementación se da a continuación:

Acercarse

  • Módulo de importación
  • Abrir archivo en modo escritura
  • Introducir datos
  • Volcar datos al archivo
  • Continúe hasta que la opción sea sí
  • Cerrar el archivo

Programa:

Python3

# code
import pickle
print("GFG")
 
 
def write_file():
 
    f = open("travel.txt", "wb")
    op = 'y'
 
    while op == 'y':
 
        Travelcode = int(input("enter the travel id"))
        Place = input("Enter the Place")
        Travellers = int(input("Enter the number of travellers"))
        buses = int(input("Enter the number of buses"))
 
        pickle.dump([Travelcode, Place, Travellers, buses], f)
 
        op = input("Dp you want to continue> (y or n)")
 
    f.close()
 
 
print("entering the details of passengers in the pickle file")
write_file()

Ahora que tenemos datos ingresados ​​en el archivo, el enfoque para actualizar los datos se proporciona a continuación junto con la implementación basada en él:

Acercarse

  • Módulo de importación
  • Abrir documento
  • Ingrese alguna información sobre los datos que se eliminarán
  • Actualizar los datos apropiados
  • Cerrar el archivo

Programa:

Python3

import pickle
 
 
def read_file():
   
    f = open("travel.txt", 'rb')
    while True:
        try:
            L = pickle.load(f)
 
            print("Place", L[1], "\t\t Travellers :",
                  L[2], "\t\t Buses :", L[3])
 
        except EOFError:
            print("Completed reading details")
            break
    f.close()
 
 
def update_details():
   
    f1 = open("travel.txt", "rb+")
    travelList = []
    print("For a example i will be updating only Buses details")
    t_code = int(input("Enter the travel code for the updation: "))
     
    while True:
        try:
            L = pickle.load(f1)
            if L[0] == t_code:
                buses = int(input("Enter the number Buses ..."))
                L[3] = buses
            travelList.append(L)
        except EOFError:
            print("Completed Updating details")
            break
             
    f1.seek(0)
    f1.truncate()
     
    for i in range(len(travelList)):
        pickle.dump(travelList[i], f1)
    else:
        f1.close()
 
 
print("update the file")
update_details()
read_file()

Producción:

Publicación traducida automáticamente

Artículo escrito por rohit2sahu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *