32 lines
1.4 KiB
Python
32 lines
1.4 KiB
Python
from pydantic import ValidationError
|
|
from server.backend.schemas.pydantic import ExcelDigitalization,settings,Translit
|
|
from server.backend.api.excel_prices import processing
|
|
import re
|
|
import pandas as pd
|
|
def process_sheet(df,real_arti: int):
|
|
# выбираем нужные колонки по индексам
|
|
df = df.iloc[:, [real_arti]].copy()
|
|
df.dropna(inplace=True)
|
|
# складываем суммы
|
|
df = df.iloc[:, [0]]
|
|
df.columns = ['arti']
|
|
# нормализация
|
|
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True)
|
|
df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})')
|
|
# группировка
|
|
print(df)
|
|
df = processing(df)
|
|
validated_rows, errors = [], []
|
|
for i, row in df.iterrows():
|
|
try:
|
|
validated_rows.append(ExcelDigitalization(**row.to_dict()))
|
|
except ValidationError as e:
|
|
errors.append((i, e.errors()))
|
|
if errors:
|
|
raise Exception("There are some errors with validation in digitalization", errors)
|
|
df_validated = pd.DataFrame([r.model_dump() for r in validated_rows])
|
|
return df_validated
|
|
def evaluating(df, real_arti:int, types:str):
|
|
validated_rows_1 = process_sheet(df, real_arti=real_arti) # номера столбцов от озона
|
|
validated_rows_1.to_excel(f"./excel_files/{types}.xlsx")
|
|
return validated_rows_1 |