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.

Problema al leer desde un archivo de texto utilizando CSV.

Estoy trabajando en un proyecto y estoy atascado porque cuando intenté leer del archivo “nrwolek, nrwolbiz, nrwolpr” en lugar de obtener [1E, 2E, 3E, 4E, 5E], [1B,2B,3B,4B,5B], [1P, 2P, 3P], obtuve nrwolek = 1E, nrwolbiz = 2E, nrwolpr u 3E. Parece que no lee una lista completa, sino solo elementos de ella. ¿Hay un método para corregir esto? ¿O es una buena solución resolver esto con JSON? Código de lectura:

import csv
from lot import DatabaseofLoty, Lot

def read_from_csv(path):
    loty = []
    with open(path,"r") as file_handle:
        reader = csv.DictReader(file_handle)
        for row in reader:
            numer_lotu = row["numer_lotu"]
            id_samolotu = row["id_samolotu"]
            czas_lotu = row['czas_lotu']
            trasa = row['trasa']
            wolne_miejscaek = row['wolne_miejscaek']
            wolne_miejscabiz = row['wolne_miejscabiz']
            wolne_miejscapr = row['wolne_miejscapr']
            bramka = row['bramka']
            cenaek = row['cenaek']
            cenabiz = row['cenabiz']
            cenapr = row['cenapr']
            nrwolek = row['nrwolek']
            nrwolbiz = row['nrwolbiz']
            nrwolpr = row['nrwolpr']
            lot = Lot(numer_lotu, id_samolotu, czas_lotu, trasa,
                      wolne_miejscaek,
                      wolne_miejscabiz, wolne_miejscapr, bramka,
                      cenaek, cenabiz, cenapr)
            loty.append(lot)
            database = DatabaseofLoty(loty)
    return database
print(read_from_csv("loty.txt"))

Archivo de texto:

numer_lotu,id_samolotu,czas_lotu,trasa,wolne_miejscaek,wolne_miejscabiz,wolne_miejscapr,bramka,cenaek,cenabiz,cenapr,nrwolek,nrwolbiz,nrwolpr
1,3,3:52,Amsterdam-Berlin,129,92,192,8,52,68,75, [1E, 2E, 3E, 4E, 5E], [1B,2B,3B,4B,5B], [1P, 2P, 3P]
2,3,3:52,Tokio-Berlin,129,92,192,8,580,720,1234
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el formato de los datos en las columnas “nrwolek”, “nrwolbiz” y “nrwolpr” del archivo CSV. Parece que los datos en estas columnas son listas, pero no se están leyendo como listas cuando se lee el archivo CSV.

    Una posible solución a este problema es utilizar el formato JSON en lugar de CSV para almacenar los datos. JSON es un formato de intercambio de datos ligero que es fácil de leer y escribir en Python. Con JSON, puedes almacenar y leer fácilmente objetos de lista.

    Para convertir los datos de CSV a JSON, puedes utilizar los módulos csv y json en Python. Aquí tienes un ejemplo de código:

    import csv
    import json
    
    def leer_desde_csv(ruta):
        loty = []
        with open(ruta, "r") as archivo:
            lector = csv.DictReader(archivo)
            for fila in lector:
                nrwolek = json.loads(fila["nrwolek"])
                nrwolbiz = json.loads(fila["nrwolbiz"])
                nrwolpr = json.loads(fila["nrwolpr"])
                lot = Lot( ... )  # inicializa el objeto Lot con los datos
                loty.append(lot)
                base_de_datos = DatabaseofLoty(loty)
        return base_de_datos
    

    En este código, estamos utilizando la función json.loads() para convertir la cadena de datos en las columnas “nrwolek”, “nrwolbiz” y “nrwolpr” en listas de Python reales.

    Una vez que hayas convertido los datos al formato JSON, puedes leer y escribir fácilmente los datos en un archivo utilizando el módulo json.

    Alternativamente, si quieres seguir utilizando el formato CSV, puedes modificar el código para dividir la cadena de datos en las columnas “nrwolek”, “nrwolbiz” y “nrwolpr” en una lista utilizando la función split(). Aquí tienes un ejemplo de código:

    def leer_desde_csv(ruta):
        loty = []
        with open(ruta, "r") as archivo:
            lector = csv.DictReader(archivo)
            for fila in lector:
                nrwolek = fila["nrwolek"].strip("[]").split(", ")
                nrwolbiz = fila["nrwolbiz"].strip("[]").split(", ")
                nrwolpr = fila["nrwolpr"].strip("[]").split(", ")
                lot = Lot( ... )  # inicializa el objeto Lot con los datos
                loty.append(lot)
                base_de_datos = DatabaseofLoty(loty)
        return base_de_datos
    

    En este código, utilizamos la función strip() para eliminar los corchetes cuadrados de la cadena de datos, y luego utilizamos la función split() para dividir la cadena en una lista.

Comments are closed.