繁体   English   中英

如何使用 FastAPI 以 JSON 格式返回 a.csv 文件/Pandas DataFrame?

[英]How to return a .csv file/Pandas DataFrame in JSON format using FastAPI?

我有一个要在 FastAPI 应用程序中呈现的.csv文件。 我只设法以 JSON 格式呈现.csv文件,如下所示:

def transform_question_format(csv_file_name):

    json_file_name = f"{csv_file_name[:-4]}.json"

    # transforms the csv file into json file
    pd.read_csv(csv_file_name ,sep=",").to_json(json_file_name)

    with open(json_file_name, "r") as f:
        json_data = json.load(f)

    return json_data

@app.get("/questions")
def load_questions():

    question_json = transform_question_format(question_csv_filename)

    return question_json

当我尝试直接返回pd.read_csv(csv_file_name,sep=",").to_json(json_file_name)时,它可以工作,因为它返回一个字符串。

我应该如何进行? 我相信这不是这样做的好方法。

下面显示了从.csv文件/Pandas DataFrame 返回数据的四种不同方式。

选项 1是将文件数据转换为JSON ,然后将其解析为dict 您可以选择使用to_json()方法中的orient参数更改数据的方向。

  • 更新 1 :使用to_dict()方法可能是更好的选择,因为不需要解析JSON字符串。
  • 更新 2 :当使用to_dict()方法并返回dict时,FastAPI 在幕后使用jsonable_encoder自动将该返回值转换为JSON 因此,为了避免额外的处理,您仍然可以使用to_json()方法,但不是解析JSON字符串,而是将其放入Response并直接返回,如下例所示。

选项 2是使用to_string()方法以string格式返回数据。

选项 3是使用 to_html to_html()方法将数据作为HTML表返回。

选项 4是使用 FastAPI 的FileResponse返回file

from fastapi import FastAPI, Response
from fastapi.responses import FileResponse
from fastapi.responses import HTMLResponse
import pandas as pd
import json

df = pd.read_csv("file.csv")
app = FastAPI()

def parse_csv(df):
    res = df.to_json(orient="records")
    parsed = json.loads(res)
    return parsed
    
@app.get("/questions")
def load_questions():
    return Response(df.to_json(orient="records"), media_type="application/json")  # Option 1 (Updated 2): Return as JSON directly
    #return df.to_dict(orient="records")  # Option 1 (Updated 1): Return as dict (encoded to JSON behind the scenes)
    #return parse_csv(df)  # Option 1: Parse the JSON string and return as dict (encoded to JSON behind the scenes)
    #return df.to_string()  # Option 2: Return as string
    #return HTMLResponse(content=df.to_html(), status_code=200)  # Option 3: Return as HTML Table
    #return FileResponse(path="file.csv", filename="file.csv")   # Option 4: Return as File

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM