DB_JOB/_스크립트/_br_scan.py
hehihoho3 df16c98366 백업: DB수집 전체 스냅샷 (공공기관2 정리 전)
공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:15:40 +09:00

54 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
"""보령시 210행~끝: E병합 그룹별 F자식 형태/수량 스캔. 합치기 대상 판정."""
import openpyxl
XLSX = r'D:\01.프로젝트\DB수집\작업파일\광역_사이트맵\충청남도\6.보령시\충청남도_보령시.xlsx'
ws = openpyxl.load_workbook(XLSX).active
last = 3
for r in range(3, ws.max_row + 1):
if ws.cell(r, 11).value:
last = r
print('마지막 데이터행', last)
# E 병합 범위(>=210)
emerges = {}
for mr in ws.merged_cells.ranges:
if mr.min_col == 5 and mr.max_row >= 210:
emerges[mr.min_row] = (mr.min_row, mr.max_row, ws.cell(mr.min_row, 5).value)
# 210부터 행 훑기
r = 210
elig = noelig = 0
while r <= last:
e = ws.cell(r, 5).value
# E 병합?
rng = None
for mr in ws.merged_cells.ranges:
if mr.min_col == 5 and mr.min_row <= r <= mr.max_row:
rng = (mr.min_row, mr.max_row); break
if rng and rng[1] > rng[0]:
r1, r2 = rng
elabel = ws.cell(r1, 5).value
dlabel = ws.cell(r1, 4).value
ls = [ws.cell(x, 12).value for x in range(r1, r2 + 1)]
ms = [ws.cell(x, 13).value for x in range(r1, r2 + 1)]
fs = [ws.cell(x, 6).value for x in range(r1, r2 + 1)]
allpage = all((l in ('페이지', '사이트')) for l in ls)
kinds = set(ls)
tag = 'O합치기' if allpage else 'X(게시판섞임)'
if allpage: elig += 1
else: noelig += 1
try:
ssum = sum(int(m) for m in ms if m is not None)
except Exception:
ssum = '?'
print('E[%d~%d] %s > %s (%d행) L=%s M합=%s %s' % (r1, r2, dlabel, elabel, r2 - r1 + 1, kinds, ssum, tag))
if not allpage:
for x in range(r1, r2 + 1):
print(' - %s L=%s M=%s' % (ws.cell(x, 6).value, ws.cell(x, 12).value, ws.cell(x, 13).value))
r = r2 + 1
else:
# 단일행(E 비병합) 또는 E없음
r += 1
print('\n합치기대상 E그룹:', elig, '/ 제외(게시판섞임):', noelig)