Sobes.tech
Назад к вопросам
Middle
2

Как провалидировать входящий CSV/Parquet файл в FastAPI (наличие нужных столбцов, диапазоны значений)?

Компании, где спрашивали
Бюро 1440Бюро 1440

Ответ от нейросети

sobes.tech AI

В FastAPI для валидации входящего CSV или Parquet файла можно:

  1. Получить файл через UploadFile.
  2. Считать содержимое в память (например, с помощью pandas).
  3. Проверить наличие нужных столбцов.
  4. Проверить диапазоны значений в столбцах.

Пример для CSV:

from fastapi import FastAPI, File, UploadFile, HTTPException
import pandas as pd

app = FastAPI()

REQUIRED_COLUMNS = {'id', 'value', 'date'}

@app.post("/upload-csv/")
async def upload_csv(file: UploadFile = File(...)):
    if not file.filename.endswith('.csv'):
        raise HTTPException(status_code=400, detail="Only CSV files are accepted")
    content = await file.read()
    try:
        df = pd.read_csv(pd.compat.StringIO(content.decode('utf-8')))
    except Exception as e:
        raise HTTPException(status_code=400, detail=f"Invalid CSV file: {e}")

    missing_cols = REQUIRED_COLUMNS - set(df.columns)
    if missing_cols:
        raise HTTPException(status_code=400, detail=f"Missing columns: {missing_cols}")

    if not df['value'].between(0, 100).all():
        raise HTTPException(status_code=400, detail="Column 'value' must be between 0 and 100")

    # Дополнительные проверки...

    return {"message": "File is valid"}

Для Parquet можно использовать pd.read_parquet() вместо pd.read_csv(). Главное — обработать исключения и проверить структуру данных.