我正在尝试使用 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(...),
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}
Run Code Online (Sandbox Code Playgroud)
我尝试直接使用内容或使用或file.file转换它。我也尝试过。我在示例代码中得到的错误是base64StringIOcodec
Run Code Online (Sandbox Code Playgroud)AttributeError: 'SpooledTemporaryFile' object has no attribute 'readable'
小智 7
将编码更改为最适合您的编码,我找到了解决方法:
from io import StringIO
pd.read_csv(StringIO(str(data_file.file.read(), 'utf-16')), encoding='utf-16')
Run Code Online (Sandbox Code Playgroud)
这是一种使用库csv并codecs创建记录的解决方法,然后可以将其转换为 pandas 数据框:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6993 次 |
| 最近记录: |