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 el 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 está 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:
- 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)
- 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 se encuentra 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 encima de pickle utilizando un módulo de archivo de base de datos.
- truncar()- cambia el tamaño del archivo
Para eliminar contenido de un archivo pickle, primero debemos agregarle contenido, a continuación se muestra un enfoque para hacer lo mismo junto con su implementació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
import pickle 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 eliminar datos del mismo 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
- Eliminar datos apropiados
- Cerrar el archivo
Programa:
Python3
import pickle def delete_details(): f1 = open("travel.txt", 'rb+') travelList = [] t_place = input("Enter the place to delete :") while True: try: L = pickle.load(f1) if(L[1] != t_place): travelList.append(L) except EOFError: print("completed deleting details") break f1.seek(0) f1.truncate() for i in range(len(travelList)): pickle.dump(travelList[i], f1) else: f1.close() # reading content in the file. 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() print("deleting the desired column") delete_details() print("Reading the file") 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