Python 如何使用FastAPI上传csv,并使用Pandas在内存中进行处理?
我正在尝试用FastAPI上传csv文件,然后将其加载到pandas中Python 如何使用FastAPI上传csv,并使用Pandas在内存中进行处理?,python,fastapi,Python,Fastapi,我正在尝试用FastAPI上传csv文件,然后将其加载到pandas中 import pandas as pd import os import io, base64 from fastapi import FastAPI, File, UploadFile, Form app = FastAPI() @app.post('/uploadfile/') async def create_data_file( experiment: str = Form(...),
import pandas as pd
import os
import io, base64
from fastapi import FastAPI, File, UploadFile, Form
app = FastAPI()
@app.post('/uploadfile/')
async def create_data_file(
experiment: str = Form(...),
file_type: str = Form(...),
file_id: str = Form(...),
data_file: UploadFile = File(...),
):
#decoded = base64.b64decode(data_file.file)
#decoded = io.StringIO(decoded.decode('utf-8'))
print(pd.read_csv(data_file.file, sep='\t'))
return {'filename': data_file.filename,
'experiment':experiment,
'file_type': file_type,
'file_id': file_id}
我尝试直接使用file.file
内容,或者使用base64
或StringIO
转换它。我还尝试了codec
。我在示例代码中遇到的错误是
这是一种使用库
csv
和codecs
创建记录的变通方法,这些记录可以转换为数据帧:
def to_df(file):
data = file.file
data = csv.reader(codecs.iterdecode(data,'utf-8'), delimiter='\t')
header = data.__next__()
df = pd.DataFrame(data, columns=header)
return df
将编码更改为最适合您的编码,我发现了以下解决方法:
from io import StringIO
pd.read_csv(StringIO(str(data_file.file.read(), 'utf-16')), encoding='utf-16')
您不想将文件保存为csv吗。我想把它转换成拼花地板。我想看看失败的文件的例子。上面的方法对我有效。(唯一的区别是我的测试文件不是以制表符分隔的)
from io import StringIO
pd.read_csv(StringIO(str(data_file.file.read(), 'utf-16')), encoding='utf-16')