DB_JOB/작업파일/공공기관2/_gnb_write.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

49 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
"""브라우저로 추출한 GNB 트리(_gnb\{num}.json)를 phase1.write_excel로 엑셀 기록.
사용: python _gnb_write.py {num} [{num} ...]
"""
import sys, io, os, json, importlib.util
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
SCRIPTS = r"D:\01.프로젝트\DB수집\_스크립트"
GNB_DIR = r"D:\01.프로젝트\DB수집\작업파일\공공기관2\_gnb"
# phase1 모듈 로드 (write_excel 재사용)
spec = importlib.util.spec_from_file_location("p1", os.path.join(SCRIPTS, "_공공기관2_phase1.py"))
p1 = importlib.util.module_from_spec(spec)
spec.loader.exec_module(p1)
COL = {1: 'D', 2: 'E', 3: 'F', 4: 'G', 5: 'H', 6: 'I', 7: 'J'}
def to_raw_rows(gnb):
stack = {}
raw = []
for it in gnb:
d = int(it['depth'])
if d > 7:
d = 7
stack[d] = (it.get('label') or '').strip()
for k in list(stack):
if k > d:
del stack[k]
row = {}
for i in range(1, d + 1):
row[COL[i]] = stack.get(i, '')
row['href'] = it.get('href') or ''
raw.append(row)
return raw
def main():
nums = sys.argv[1:]
for ns in nums:
path = os.path.join(GNB_DIR, f"{ns}.json")
if not os.path.exists(path):
print(f"[{ns}] json 없음 — 스킵"); continue
data = json.load(open(path, encoding='utf-8'))
raw = to_raw_rows(data['gnb'])
n = p1.write_excel(data['name'], int(data['num']), data['base'], raw)
print(f"[{data['num']}.{data['name']}] write_excel → {n}")
if __name__ == '__main__':
main()