Files
copp_parser1/main.py
2025-06-19 16:46:23 +05:00

184 lines
7.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pandas as pd
import math
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter
class read_drop_table:
def __init__(self, path: str, sheet: str):
db = pd.read_excel(path, sheet_name=sheet)
self.grafa2 = db["Графа 2"].dropna().tolist()
self.grafa4 = db["Графы 4"].dropna().tolist()
self.grafa6 = db["Графа 6"].dropna().tolist()
self.grafa7 = db["Графа 7"].dropna().tolist()
self.grafa9 = db["Графа 9"].dropna().tolist()
self.grafa10 = db["Графа 10"].dropna().tolist()
self.grafa14 = db["Графа 14"].dropna().tolist()
self.grafa5811 = db["Графы 5,8,11"].dropna().tolist()
class read_collection_form:
def __init__(self, path: str, sheet: str):
self.path = path
self.sheet = sheet
self.db = pd.read_excel(path, sheet_name=sheet, header=10)
# Оставим только строки, где указан субъект РФ
self.db = self.db.dropna(subset=["9"])
self.load_openpyxl()
def load_openpyxl(self):
self.wb = load_workbook(self.path)
self.ws = self.wb[self.sheet]
def paint_green(self, address: str):
green_fill = PatternFill(start_color="90EE90", end_color="90EE90", fill_type="solid")
self.ws[address].fill = green_fill
def paint_red(self, address: str):
red_fill = PatternFill(start_color="FF7F7F", end_color="FF7F7F", fill_type="solid")
self.ws[address].fill = red_fill
def rerol_column(self, row, row_index):
status = row.values[4] # графа 4: статус обучающегося
graf9_value = row.values[9] if len(row.values) > 9 else None
graf5_value = row.values[5] if len(row.values) > 5 else None
for column_index, cell in enumerate(row.values):
address = get_column_letter(column_index + 1) + str(row_index + 12)
match column_index:
case 0 | 1 | 3:
if pd.isna(cell):
self.paint_red(address)
else:
self.paint_green(address)
case 2:
if cell in temp.grafa2:
self.paint_green(address)
else:
self.paint_red(address)
case 4:
if pd.isna(cell):
self.paint_red(address)
elif cell in temp.grafa4:
self.paint_green(address)
else:
self.paint_red(address)
case 5:
if pd.isna(cell):
self.paint_red(address)
elif cell in temp.grafa5811:
self.paint_green(address)
else:
self.paint_red(address)
case 6:
if pd.isna(cell):
self.paint_green(address)
elif cell in temp.grafa6:
self.paint_green(address)
else:
self.paint_red(address)
case 7:
if pd.isna(cell):
self.paint_green(address)
elif cell in temp.grafa7:
self.paint_green(address)
else:
self.paint_red(address)
case 9:
if pd.isna(cell):
if row.values[4] == "не завершил обучение: отчислен по собственному желанию":
self.paint_green(address)
else:
self.paint_red(address)
elif cell in temp.grafa9:
self.paint_green(address)
else:
self.paint_red(address)
case 10:
if graf9_value in [
"зарегистрирован в ЦЗН в качестве безработного (получает пособие по безработице)",
"не планирует трудоустраиваться, в том числе по причинам получения иных социальных льгот"
]:
if pd.isna(cell):
self.paint_red(address)
elif cell in temp.grafa10:
self.paint_green(address)
else:
self.paint_red(address)
case 11:
if graf9_value in [
"трудоустроен у иного работодателя",
"будет трудоустроен у иного работодателя"
]:
if pd.isna(cell):
pass
elif cell in temp.grafa5811:
self.paint_green(address)
else:
self.paint_red(address)
case 12 | 13:
if graf9_value in [
"трудоустроен у иного работодателя",
"будет трудоустроен у иного работодателя"
]:
if pd.isna(cell):
self.paint_red(address)
else:
self.paint_green(address)
case 14:
if graf5_value == "да":
if graf9_value not in [
"трудоустроен у работодателя-партнера кластера",
"будет трудоустроен у работодателя-партнера кластера"
]:
self.paint_red(address)
else:
self.paint_green(address)
def iterate_rows(self):
for row_index, row in self.db.iterrows():
self.rerol_column(row=row, row_index=row_index)
self.wb.save(self.path)
import os
def list_files_in_current_directory(extension_filter=None):
# Получаем путь к папке, где находится скрипт
current_dir = os.path.dirname(os.path.abspath(__file__))
# Список всех файлов
all_files = []
for file in os.listdir(current_dir):
full_path = os.path.join(current_dir, file)
if os.path.isfile(full_path):
if extension_filter:
if file.lower().endswith(extension_filter.lower()):
all_files.append(full_path)
else:
all_files.append(full_path)
return all_files
# Получить все файлы
files = list_files_in_current_directory()
# Только .xlsx файлы
xlsx_files = list_files_in_current_directory(".xlsx")
for path in xlsx_files:
temp = read_drop_table(path=path, sheet="Выпадающие списки")
temp1 = read_collection_form(path=path, sheet="Форма сбора").iterate_rows()