我试图从用户那里获取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)
2条答案
按热度按时间mbzjlibv1#
Fastapi
是一个API
,所以不要期望用户能够通过一个漂亮的UI提交文件。API
是正确的。我没看到任何问题。因为我不知道上传部分是什么样子的(即接口),所以我不能在这里建议,但是如果你通过
javascript
上传文件,那么你应该使用FormData
,并按照路由参数中指定的方式调用文件的条目(即file
)。你可以在这里查看我对一个非常类似的问题的其他答案。在这个回复中,我只是总结了答案中所写的内容。希望这就是你想要的。
如何将文件(docx,doc,pdf或json)发送到fastapi并在没有UI(即HTML)的情况下对其进行预测?
cwtwac6a2#
**
def create_upload_file(file:UploadFile = File(...)):
**
IMO,这里唯一的问题可能是查询参数中的名称“file”。在表单数据输入名称中应该给出相同的名称(在前端文件上传表单中)。
为了简单起见,下面body中的输入name应该匹配API中upload_file的查询参数