BurningTimesAi/공유/기획/FirstRising/UI/tools/comp_diff.py

49 lines
1.8 KiB
Python
Raw Permalink Normal View History

2026-09-28 13:59:32 +00:00
# 두 구성 요소 값 기록(comp_dump 의 출력)을 견준다. python comp_diff.py <왼쪽 파일> <오른쪽 파일> [--only-common]
# · 같은 열쇠(오브젝트 | 구성 요소 | 속성)의 값이 다르면 적고, 한쪽에만 있는 구성 요소는 이름만 적는다
import sys, io, collections
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
def load(path):
rows = collections.OrderedDict()
objects = []
for line in io.open(path, encoding='utf-8'):
line = line.rstrip('\n')
if line.startswith('## '):
objects.append(line[3:])
continue
parts = line.split(' | ', 2)
if len(parts) < 3 or ' = ' not in parts[2]:
continue
prop, value = parts[2].split(' = ', 1)
rows[(parts[0], parts[1], prop)] = value
return rows, objects
left, left_objects = load(sys.argv[1])
right, right_objects = load(sys.argv[2])
left_comps = set((k[0], k[1]) for k in left)
right_comps = set((k[0], k[1]) for k in right)
print('== 왼쪽에만 있는 구성 요소')
for c in sorted(left_comps - right_comps):
print(' ', c[0], '|', c[1])
print('== 오른쪽에만 있는 구성 요소')
for c in sorted(right_comps - left_comps):
print(' ', c[0], '|', c[1])
print('== 값이 다른 속성(왼쪽 → 오른쪽)')
count = 0
for k, v in left.items():
if k in right and right[k] != v:
print(' ', k[0], '|', k[1], '|', k[2], ':', v, '→', right[k])
count += 1
print('다른 값', count)
print('== 한쪽에만 있는 속성(같은 구성 요소 안)')
for k in left:
if k not in right and (k[0], k[1]) in right_comps:
print(' 왼쪽만', k[0], '|', k[1], '|', k[2], '=', left[k])
for k in right:
if k not in left and (k[0], k[1]) in left_comps:
print(' 오른쪽만', k[0], '|', k[1], '|', k[2], '=', right[k])