DB_JOB/_스크립트/_fill_C_province.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

53 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
"""미검수 27곳 C열(사이트명)을 "광역 기관"(공백구분)으로 채움. 검수완료 제외.
사용: python -X utf8 _fill_C_province.py [--write]
"""
import sys, os, re, shutil, importlib.util
import openpyxl
HERE=os.path.dirname(os.path.abspath(__file__))
MODULES=['_chungnam_phase234_all.py','_chungbuk_phase234_all.py','_jeonbuk_phase234_all.py']
TARGETS={'서산시','아산시','천안시','청양군','홍성군',
'괴산군','단양군','보은군','영동군','옥천군','음성군','제천시','증평군','진천군','청주시','충주시',
'부안군','순창군','완주군','익산시','임실군','장수군','전주시','정읍시','진안군','서귀포시','제주시'}
def load():
sites={}
for f in MODULES:
sp=importlib.util.spec_from_file_location(f[:-3],os.path.join(HERE,f));m=importlib.util.module_from_spec(sp);sp.loader.exec_module(m)
sites.update(m.SITES)
return sites
def province_of(path):
m=re.search(r'광역_사이트맵[\\/]([^\\/]+)[\\/]',path)
return m.group(1) if m else '?'
def main():
write='--write' in sys.argv
sites=load(); locked=[]; done=[]
for org in sorted(TARGETS):
if org not in sites: print(org,'SITES없음'); continue
xlsx=sites[org]['xlsx']
prov=province_of(xlsx); newC=f'{prov} {org}'
wb=openpyxl.load_workbook(xlsx); ws=wb.active
ch=0
for r in range(3,ws.max_row+1):
content = any(ws.cell(r,c).value not in (None,'') for c in (2,4,5,6,7,8,9,10,11,12))
cur=ws.cell(r,3).value
if (cur not in (None,'')) or content:
if cur!=newC:
if write: ws.cell(r,3).value=newC
ch+=1
if write and ch:
try:
bak=xlsx.replace('.xlsx','_backup_C광역전.xlsx')
if not os.path.exists(bak): shutil.copy(xlsx,bak)
wb.save(xlsx)
except PermissionError:
locked.append(org); print(f'{org:6} ❌파일열림 (미적용)'); continue
done.append((org,newC,ch))
print(f'{org:6}"{newC}" 변경 {ch}{"[적용]" if write else "[DRY]"}')
if locked: print('\n⚠️ 파일열림으로 미적용:',', '.join(locked))
if __name__=='__main__': main()