# 두 구성 요소 값 기록(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])