DB_JOB/작업파일/_스크립트/_scan_buyeo_visual.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

46 lines
2.2 KiB
Python

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
import openpyxl
PKG = r'D:\01.프로젝트\DB수집\작업파일\_제출패키지_2026-06-03\프리랜서1\충청남도_부여군.xlsx'
wb = openpyxl.load_workbook(PKG); ws = wb.active
# rows where K has URL but L/ or where M/N/O blank on 게시판/페이지
print('=== content rows with missing L(형태) ===')
for r in range(3, ws.max_row+1):
if ws.cell(r,2).value in (None,''): continue
k=ws.cell(r,11).value; l=ws.cell(r,12).value
if (k not in (None,'')) and (l in (None,'')):
print(f' r{r} B={ws.cell(r,2).value} K={k!r} L={l!r}')
print('\n=== L distribution + M/N/O blanks ===')
from collections import Counter
lc=Counter()
mblank=[]; nblank=[]
for r in range(3, ws.max_row+1):
if ws.cell(r,2).value in (None,''): continue
l=ws.cell(r,12).value; lc[l]+=1
m=ws.cell(r,13).value; n=ws.cell(r,14).value
if l in ('페이지','게시판') and m in (None,''): mblank.append(r)
if l in ('페이지','게시판') and n in (None,''): nblank.append(r)
print('L:', dict(lc))
print('M blank(페이지/게시판):', len(mblank), mblank[:20])
print('N blank(페이지/게시판):', len(nblank), nblank[:20])
# single-row D/E/F merges & gaps: list D merges to see grouping
print('\n=== D-column merges (메뉴명 groups) ===')
dm=sorted([m for m in ws.merged_cells.ranges if m.min_col==4 and m.min_row>=3], key=lambda x:x.min_row)
prev_end=2
for m in dm:
gap = '' if m.min_row==prev_end+1 else f' <-- GAP rows {prev_end+1}..{m.min_row-1}'
print(f' D{m.min_row}:{m.max_row} = {ws.cell(m.min_row,4).value!r}{gap}')
prev_end=m.max_row
# rows after last D merge
if prev_end < ws.max_row:
# check if remaining rows have D values (single-cell, unmerged)
rem=[r for r in range(prev_end+1, ws.max_row+1) if ws.cell(r,2).value not in (None,'')]
print(f' (rows after last D-merge: {rem[:10]} ... {len(rem)} rows, D values e.g. {[ws.cell(r,4).value for r in rem[:5]]})')
print('\n=== row heights anomaly (non-15) ===')
hh=[(r, ws.row_dimensions[r].height) for r in range(1, ws.max_row+1) if ws.row_dimensions[r].height not in (15, None)]
print('non-15 heights:', len(hh), hh[:20])