fastapi 上传excel文件并读取
首先,你需要使用 FastAPI 中的 File
类型来接收上传的文件。然后,你可以使用 pandas
库来读取 Excel 文件。
以下是一个示例代码:
from fastapi import FastAPI, File, UploadFile
import pandas as pd
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
contents = await file.read()
df = pd.read_excel(contents)
return {"filename": file.filename, "data": df.to_dict()}
在这个示例中,我们定义了一个 create_upload_file
路由,它接受一个 UploadFile
类型的参数 file
。我们可以使用 file.read()
方法来读取文件内容,并将其传递给 pandas
的 read_excel
方法来解析 Excel 文件。最后,我们将数据转换为字典格式并返回。
请注意,这只是一个简单的示例,你可能需要进行更复杂的文件验证和数据处理,以满足你的实际需求。
fastapi 上传excel文件
FastAPI 是一个用于构建 web API 的现代高性能框架,它本身并不直接支持 Excel 文件上传,但它可以与第三方库如 fastapi-file-upload
或 python-excel
结合来处理这项任务。
首先,你需要安装必要的依赖。例如,你可以使用 starlette-files
库来处理文件上传,并结合 pandas
来读取 Excel 文件:
pip install starlette files pandas openpyxl # 如果需要读取 Excel 文件
接下来,创建一个 FastAPI路由来接收文件上传:
from fastapi import FastAPI, File, UploadFile
import pandas as pd
app = FastAPI()
@app.post("/upload_excel")
async def upload_excel(file: UploadFile = File(...)):
file_name = file.filename
file_bytes = await file.read()
try:
df = pd.read_excel(io=BytesIO(file_bytes), engine="openpyxl") # 使用openpyxl引擎读取Excel
# 对数据进行处理...
return {"message": f"Excel file {file_name} uploaded successfully.", "data": df.head() if display_first_rows else {}}
except Exception as e:
return {"error": str(e)}
在这个例子中,用户通过 POST 请求将一个名为 file
的文件上传到 /upload_excel
路由。文件内容会被读取并转换成 pandas
DataFrame。如果读取过程中有错误,会返回错误信息。
fastapi 上传excel文件,并保存在指定文件
FastAPI是一个轻量级的Web框架,用于构建Python web应用。如果你想让用户通过FastAPI接口上传Excel文件并保存到指定位置,可以按照以下步骤操作:
- 首先,安装必要的库:
- 使用
fastapi
starlette.requests
处理文件上传openpyxl
或pandas
读取Excel内容(如果需要解析)pathlib
处理文件路径
- 使用
pip install fastapi starlette requests openpyxl pandas
- 创建FastAPI应用,并设置路由和处理器函数: ```python from fastapi import FastAPI, File, UploadFile import os from pathlib import Path
app = FastAPI()
UPLOAD_DIR = "uploads" # 你需要创建这个目录 ALLOWED_EXTENSIONS = {'xlsx', 'xls'}
@app.post("/upload_excel/") async def upload_excel(file: UploadFile = File(...)): filename = file.filename if not allowed_file(filename): return {"error": f"只允许上传.xlsx或.xls文件"}
# 保存文件到指定目录
file_path = os.path.join(UPLOAD_DIR, filename)
with open(file_path, "wb") as buffer:
buffer.write(file.file.read())
# 可能还需要处理Excel内容,这里仅保存了文件
# 使用openpyxl:
# workbook = await read_excel_from_buffer(file.file)
# 或者使用pandas:
# data = await load_excel_to_dataframe(file_path)
return {"message": "文件已上传", "file_path": file_path}
def allowed_file(filename: str) -> bool: return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
可选的辅助函数,假设使用openpyxl
async def read_excel_from_buffer(buffer: bytes): pass
可选的辅助函数,假设使用pandas
async def load_excel_to_dataframe(file_path: str): pass
```
- 运行你的FastAPI应用。