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.

Cómo cargar un archivo CSV en FastAPI y convertirlo en JSON?

Estoy tratando de subir mi archivo .csv a mi servidor FastAPI, luego convertirlo a JSON y devolverlo al cliente. Sin embargo, cuando intento procesarlo directamente (sin almacenarlo en algún lugar), obtengo este error:

Error: FileNotFoundError: [Error 2] No such file or directory: "testdata.csv"

Este es mi código FastAPI:

@app.post("/upload", status_code=200, description="Propósito de prueba")
async def upload(file: UploadFile = File(...)):
    data = {}
    with open(file.filename, encoding='utf-8') as csvf:
        csvReader = csv.DictReader(csvf)
        for rows in csvReader:
            key = rows['No']
            data[key] = rows
    return {data}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error que estás encontrando se debe al hecho de que estás intentando acceder al archivo directamente usando open(file.filename, encoding='utf-8'). Esto solo funciona si el archivo ya existe en el sistema de archivos del servidor. Sin embargo, como estás subiendo el archivo, no existe en tu sistema de archivos hasta que se procese y se guarde.

    Para solucionar este problema, primero debes guardar el archivo en el sistema de archivos del servidor utilizando el método file.write(). Una vez que el archivo esté guardado, puedes procesarlo normalmente. Aquí tienes una versión actualizada de tu código que incluye la guarda del archivo:

    @app.post("/upload", status_code=200, description="A fin de prueba")
    async def upload(file: UploadFile = File(...)):
        # Guarda el archivo en el sistema de archivos del servidor
        contents = await file.read()
        with open("testdata.csv", "wb") as f:
            f.write(contents)
    
        # Procesa el archivo y conviértelo a JSON
        data = {}
        with open("testdata.csv", encoding='utf-8') as csvf:
            csvReader = csv.DictReader(csvf)
            for rows in csvReader:             
                key = rows['No']
                data[key] = rows
    
        # Devuelve los datos JSON al cliente
        return data
    

    En este código actualizado, primero guardamos el archivo utilizando file.read() y open("testdata.csv", "wb"). El archivo se guarda en el directorio de trabajo actual con el nombre testdata.csv. Luego podemos abrir este archivo y procesarlo como de costumbre. Una vez que los datos se convierten en JSON, simplemente los devolvemos al cliente.

Comments are closed.