如何在FastAPI中上传和读取CSV文件?



我试图从用户获得CSV或XLSX文件并将其转换为YAML。我已经制作了python脚本来将文件从CSV转换为YAML和XLSX本地转换为YAML,但我不能通过从用户获取文件来实现。我如何读取上传的文件?

@app.post("/cqa/uploadFile")
def create_upload_file(file: UploadFile = File(...)):
if file.filename.endswith('.csv') or file.filename.endswith('.xlsx'):
toYAML(file)
return {"filename": file.filename}
else:
raise HTTPException( status_code=status.HTTP_405_METHOD_NOT_ALLOWED)

def toYAML(file):
if file.filename.endswith('.csv'):
convert_yaml(codecs.iterdecode(file.file,'utf-8'))
else:
xlsx_to_csv(file)
convert_yaml("xlsxCSV.csv")

这是我如何将XLSX转换为CSV:

def xlsx_to_csv(file):
data_xls = pd.read_excel(file, index_col=None)
data_xls.to_csv("xlsxCSV.csv", encoding='utf-8', index=False)

这是我如何将CSV转换为YAML:

def convert_yaml(file):
file=open(file)
x = csv.reader(file)
file_arr=[]
for  r in x :
file_arr.append(r)

Fastapi是一个API,所以不要指望用户能够通过一个漂亮的UI提交文件。

API正确。我看没什么问题。

因为我不知道上传部分看起来像什么(即接口),我不能在这里提出建议,但如果你通过javascript上传文件,那么你应该使用FormData并以与路由参数(即file)相同的方式调用该文件的入口。

你可以在这里查看我对一个非常相似的问题的另一个答案。在此回复中,我只是总结了在回答中所写的内容。希望这就是你想要的。

如何将文件(docx, doc, pdf或json)发送到fastapi并预测它没有UI(即HTML)?

**

def create_upload_file (文件: UploadFile = File(…)):

* *

依我看,这里唯一的问题可能是名称"文件"在查询参数中。相同的名称应该在表单数据输入名称(在前端文件上传表单)。

为了简单起见,下面的输入名称应该与api

中upload_file的查询参数匹配。
<body>
<form action="/files/" enctype="multipart/form-data" method="post">
<input name="file" type="file" multipart>
<input type="submit">
</form>
</body>

最新更新