파이썬 표준 라이브러리에는 문자열이나 파일 간의 차이점(diff)을 찾기 위해 특별히 만들어진 모듈이 있습니다. 바로 difflib입니다. 이 모듈의 unified_diff 함수를 호출하면 별도의 외부 도구 없이도 두 파일의 차이를 손쉽게 확인할 수 있습니다.
예제: 비교할 두 파일 준비하기
예를 들어 다음과 같은 내용을 담고 있는 두 개의 파일, file1과 file2가 있다고 가정해 보겠습니다.
file1: Hello People of the world file2: Hello People from India
차이점을 계산하는 코드
두 파일의 차이를 구하려면 아래와 같은 코드를 사용합니다. 파일 내용을 줄 단위 리스트로 읽어온 뒤 unified_diff에 전달하는 것이 핵심입니다.
import difflib
with open('file1') as f1:
f1_text = f1.read().splitlines()
with open('file2') as f2:
f2_text = f2.read().splitlines()
# 두 파일의 차이점을 찾아 출력합니다.
for line in difflib.unified_diff(f1_text, f2_text,
fromfile='file1', tofile='file2',
lineterm=''):
print(line)실행 결과
위 코드를 실행하면 다음과 같은 통합 diff(unified diff) 형식의 결과가 출력됩니다.
--- file1 +++ file2 @@ -1,5 +1,4 @@ Hello People -of -the -world +from +India
결과 해석하기
출력 결과는 유닉스 계열 시스템에서 널리 쓰이는 diff 형식과 동일하게 구성됩니다.
- --- file1 / +++ file2: 비교 대상인 원본 파일과 수정된 파일의 이름을 나타냅니다.
- @@ -1,5 +1,4 @@: 원본 파일의 1번째 줄부터 5줄, 수정된 파일의 1번째 줄부터 4줄이 변경 범위에 포함되었음을 의미합니다.
- -로 시작하는 줄: 원본 파일(file1)에는 있지만 새 파일(file2)에서 삭제된 줄입니다.
- +로 시작하는 줄: 새 파일(file2)에 추가된 줄입니다.
- 공백으로 시작하는 줄: 두 파일에서 공통으로 존재하는, 변경되지 않은 줄입니다.
이처럼 difflib의 unified_diff 함수를 활용하면 코드 리뷰, 로그 비교, 설정 파일 검증 등 다양한 상황에서 두 파일의 변경 사항을 빠르고 정확하게 파악할 수 있습니다.