如何使用 .csv 文件编写 FAST API 函数并在 pandas 中进行一些预处理

How to write a FAST API function taking .csv file and making some preprocessing in pandas

我正在尝试创建一个 API 函数,它接收 .csv 文件(已上传)并将其作为 pandas DataFrame 打开。像那样:

from fastapi import FastAPI
from fastapi import UploadFile, Query, Form
import pandas as pd

app = FastAPI()

@app.post("/check")
def foo(file: UploadFile):
    df = pd.read_csv(file.file)
    return len(df)

然后,我正在调用我的 API:

import requests

url = 'http://127.0.0.1:8000/check'
file = {'file': open('data/ny_pollution_events.csv', 'rb')}

resp = requests.post(url=url, files=file)
print(resp.json())

但是我得到这样的错误:FileNotFoundError: [Errno 2] No such file or directory: 'ny_pollution_events.csv'

据我所知 doc pandas 能够从类文件对象中读取 .csv 文件,file.file 应该是这样。但似乎在 read_csv() 方法 pandas 中获取名称(不是文件对象本身)并尝试在本地找到它。

我是不是做错了什么? 我能以某种方式实现这个逻辑吗?

要读取 pandas 中的文件,该文件必须存储在您的 PC 上。不要忘记导入 shutil。如果您不需要将文件存储在您的 PC 上,请使用 os.remove(filepath).

将其删除
        if not file.filename.lower().endswith(('.csv',".xlsx",".xls")):
            return 404,"Please upload xlsx,csv or xls file."

        if file.filename.lower().endswith(".csv"):
            extension = ".csv"
        elif file.filename.lower().endswith(".xlsx"):
            extension = ".xlsx"
        elif file.filename.lower().endswith(".xls"):
            extension = ".xls"

        # eventid = datetime.datetime.now().strftime('%Y%m-%d%H-%M%S-') + str(uuid4())
        filepath = "location where you want to store file"+ extension

        with open(filepath, "wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        
        try:
            if filepath.endswith(".csv"):
                df = pd.read_csv(filepath)
            else:
                df = pd.read_excel(filepath)
        except:
            return 401, "File is not proper"