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

ngynwnxp  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(458)

我试图从用户那里获取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)
mbzjlibv

mbzjlibv1#

Fastapi是一个API,所以不要期望用户能够通过一个漂亮的UI提交文件。
API是正确的。我没看到任何问题。
因为我不知道上传部分是什么样子的(即接口),所以我不能在这里建议,但是如果你通过javascript上传文件,那么你应该使用FormData,并按照路由参数中指定的方式调用文件的条目(即file)。
你可以在这里查看我对一个非常类似的问题的其他答案。在这个回复中,我只是总结了答案中所写的内容。希望这就是你想要的。
如何将文件(docx,doc,pdf或json)发送到fastapi并在没有UI(即HTML)的情况下对其进行预测?

cwtwac6a

cwtwac6a2#

**

def create_upload_file(file:UploadFile = File(...)):

**

IMO,这里唯一的问题可能是查询参数中的名称“file”。在表单数据输入名称中应该给出相同的名称(在前端文件上传表单中)。
为了简单起见,下面body中的输入name应该匹配API中upload_file的查询参数

<body>
<form action="/files/" enctype="multipart/form-data" method="post">
<input name="file" type="file" multipart>
<input type="submit">
</form>
</body>

相关问题