# -*- coding: utf-8 -*- # 청양 175~끝 L/M/O/P/Q + N베이스 적용. N이미지는 몽타주 후속. 1~174 불변. import openpyxl, json, io, sys, shutil from collections import Counter sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') F=r'D:\01.프로젝트\DB수집\작업파일\광역_사이트맵\충청남도\13.청양군\충청남도_청양군.xlsx' BK=r'D:\01.프로젝트\DB수집\작업파일\광역_사이트맵\충청남도\13.청양군\충청남도_청양군_backup_LMNO재수집전.xlsx' shutil.copyfile(F,BK); print('백업',BK) d=json.load(open('_cy4.json',encoding='utf-8')) bd=json.load(open('_cy4_board.json',encoding='utf-8')) wb=openpyxl.load_workbook(F); ws=wb.active def types_str(ts): return ','.join('%d유형'%t for t in ts) if ts else None chg=0 for rs,v in d.items(): r=int(rs) L=v.get('L') if L not in ('게시판','페이지','사이트'): continue # ERR/rel skip curN=str(ws.cell(r,14).value or '') # 보드확정 override if L=='게시판' and rs in bd and not bd[rs].get('isboard'): L='페이지' # 서브사이트홈 등 false-board # L ws.cell(r,12).value=L # M if L=='사이트': for c in (13,14,15,16,17): ws.cell(r,c).value=None chg+=1; continue if L=='게시판': M=bd.get(rs,{}).get('M',0) if rs in bd else 0 ws.cell(r,13).value=M else: ws.cell(r,13).value=1; M=1 # N 베이스 if L=='게시판' and (M==0 or M is None): ws.cell(r,14).value='없음' else: extras=[] if '영상' in curN or v.get('video'): extras.append('영상') if '오디오' in curN or v.get('audio'): extras.append('오디오') ws.cell(r,14).value='어문'+(','+','.join(extras) if extras else '') # O/P/Q 공공누리 kt=v.get('kogl',{}).get('types') or [] if kt: ws.cell(r,15).value=types_str(kt) ws.cell(r,16).value='게시물' ws.cell(r,17).value='Y' if v.get('kogl',{}).get('link') else 'N' else: ws.cell(r,15).value='미부착'; ws.cell(r,16).value=None; ws.cell(r,17).value=None chg+=1 wb.save(F) print('적용행',chg) print('L',dict(Counter(ws.cell(r,12).value for r in range(175,ws.max_row+1)))) print('N',dict(Counter(ws.cell(r,14).value for r in range(175,ws.max_row+1)))) print('O',dict(Counter(ws.cell(r,15).value for r in range(175,ws.max_row+1))))