es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El modo de agregado de pickle no está agregando nada al final (Python)

Ya he creado un archivo .dat que contiene 4 columnas con los encabezados de columna como:

Nombre Clase/Sección Porcentaje de Calificación Observaciones

Necesito crear un programa que reciba información del profesor sobre los estudiantes y luego lo agregue al archivo por lotes, pero no está funcionando.

# programa para mostrar varias
# operaciones que se pueden 
# aplicar a archivos binarios

import pickle

# creando un portafolio de estudiantes

# leyendo el archivo de portafolio de estudiantes
def r_portfolio():
    with open('testing.dat', 'rb') as f:
        data = pickle.load(f)
        print(data)

# escribiendo en el portafolio de estudiantes
def w_portfolio():

    # tomando entradas
    name = input('Ingrese el nombre del estudiante: ')
    c_sec = input("Ingrese la clase y sección: ")
    per = input("Ingrese el porcentaje de calificación (%)(10°): ")
    remarks = input("Ingrese observaciones: ")

    entry = name + "\t\t" + c_sec + "\t\t" + per + "\t\t" + remarks

    # guardando la información en el archivo
    with open('testing.dat', 'ab') as f:
        pickle.dump(entry, f)

    # previsualizando el cambio
    preview = input("¿Desea previsualizar el portafolio (s/n): ")
    if preview.lower() == 's':
        r_portfolio()

w_portfolio()

Imagen

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado parece estar utilizando la biblioteca pickle para leer y escribir en un archivo binario, pero el formato de archivo mencionado en la pregunta es .dat y tiene una estructura específica con encabezados de columna. No está claro si el código está agregando la nueva entrada al archivo existente o creando un nuevo archivo con la nueva entrada.

    Para abordar el problema de agregar a un archivo .dat existente, se pueden seguir los siguientes pasos:

    1. Leer el archivo existente como texto para preservar los encabezados de columna.
    2. Convertir los datos de texto en una lista de entradas.
    3. Agregar la nueva entrada como una lista a la lista existente.
    4. Escribir la lista actualizada como texto en el archivo.

    Aquí hay un ejemplo de código que implementa estos pasos:

    import csv
    
    # función para leer los datos del archivo
    def leer_datos():
        with open('student_records.dat', 'r') as f:
            lector = csv.reader(f, delimiter='\t')
            encabezados = next(lector)
            datos = list(lector)
        return encabezados, datos
    
    # función para escribir los datos en el archivo
    def escribir_datos(encabezados, datos):
        with open('student_records.dat', 'w') as f:
            escritor = csv.writer(f, delimiter='\t')
            escritor.writerow(encabezados)
            escritor.writerows(datos)
    
    # función para agregar una nueva entrada
    def agregar_entrada():
        nombre = input('Ingrese el nombre del estudiante: ')
        clase_seccion = input('Ingrese la clase y sección: ')
        porcentaje = input('Ingrese el porcentaje del examen(10º): ')
        observaciones = input('Ingrese observaciones: ')
        nueva_entrada = [nombre, clase_seccion, porcentaje, observaciones]
    
        # leer los datos existentes
        encabezados, datos = leer_datos()
    
        # agregar la nueva entrada a los datos existentes
        datos.append(nueva_entrada)
    
        # escribir los datos actualizados en el archivo
        escribir_datos(encabezados, datos)
    
        # vista previa de los datos actualizados
        vista_previa = input("¿Desea ver una vista previa del portafolio(s/n): ")
        if vista_previa.lower() == 's':
            print(encabezados)
            for entrada in datos:
                print(entrada)
    
    # llamar a la función para agregar una nueva entrada
    agregar_entrada()
    

    Este código utiliza el módulo csv para manejar la lectura y escritura del archivo .dat, y los datos se almacenan como una lista de listas (es decir, cada fila del archivo se representa como una lista). La nueva entrada se agrega como una lista a los datos existentes y los datos actualizados se escriben de nuevo en el archivo. La opción de vista previa muestra los datos actualizados en la consola.

Comments are closed.