我有一个
.csv
文件,我想在 FastAPI 应用程序中渲染。我只设法以 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 文件转换成 JSON 文件,然后再读取这个 JSON 文件并返回。这确实不是一个高效的方法。
更好的做法是直接在内存中处理数据,然后返回 JSON 格式的响应。
以下是使用 FastAPI 返回 JSON 格式的 CSV 文件/Pandas DataFrame 的两种方法:
方法一:使用
pandas.DataFrame.to_json()
方法
from fastapi import FastAPI
import pandas as pd
app = FastAPI()
@app.get("/questions")
def load_questions():
df = pd.read_csv("questions.csv")
# 返回 JSON 格式的 DataFrame,使用 'records' 方式序列化
return df.to_json(orient="records")
这个方法直接读取 CSV 文件到 DataFrame,然后使用
to_json(orient="records")
方法将其转换为 JSON 格式的字符串,并直接返回。
orient="records"
参数确保返回的数据格式是列表,其中每个元素代表 DataFrame 中的一行数据。
方法二:使用
jsonable_encoder
函数
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
import pandas as pd
app = FastAPI()
@app.get("/questions")
def load_questions():
df = pd.read_csv("questions.csv")
# 将 DataFrame 转换为字典列表
data = df.to_dict(orient="records")
# 使用 jsonable_encoder 确保数据可以被 JSON 序列化
return jsonable_encoder(data)
这个方法先将 DataFrame 转换为字典列表,然后使用 FastAPI 提供的
jsonable_encoder
函数确保数据可以被 JSON 序列化,最后返回 JSON 响应。
两种方法都可以实现将 CSV 文件/Pandas DataFrame 以 JSON 格式返回。方法一更加简洁,而方法二更加灵活,可以处理更复杂的数据结构。
一些建议:
- 为了提高效率,可以考虑将 CSV 文件的内容缓存到内存中,避免每次请求都读取文件。
- 可以使用 FastAPI 的依赖注入功能来简化代码结构。
- 可以使用 Pydantic 模型来定义数据结构,并进行数据校验。
希望这些信息能帮到你!
标签:python,pandas,dataframe,csv,fastapi From: 71203579