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}
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:En este código actualizado, primero guardamos el archivo utilizando
file.read()
yopen("testdata.csv", "wb")
. El archivo se guarda en el directorio de trabajo actual con el nombretestdata.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.