Python difflib로 원본과 수정본의 바뀐 줄을 비교하는 실습

문장이 매끄러워져도 바뀐 숫자의 근거까지 확인된 것은 아닙니다. 원본과 수정본을 따로 저장한 뒤, 바뀐 줄부터 찾아 원본 자료와 대조하세요. Python의 difflib를 쓰면 변경 줄과 앞뒤 문맥을 함께 볼 수 있습니다.
준비물은 Python 3과 UTF-8 텍스트 파일 두 개입니다. 추가 패키지나 AI 계정은 필요 없습니다. 아래는 가상 문서로 직접 실행한 예시이며, 실제 AI 서비스의 수정 결과는 아닙니다.
실습 결과는 이렇게 나옵니다.
--- before.txt
+++ after.txt
@@ -1,4 +1,4 @@
제안서 초안
-사용자 조사: 12명
-담당자: 미정
+사용자 조사: 21명
+담당자: 김 담당(가상)
출시 목표: 11월
새 폴더에서 일반 텍스트 편집기로 아래 파일을 만드세요. 인코딩은 UTF-8을 선택하고, 원본은 덮어쓰지 않습니다.
before.txt
제안서 초안
사용자 조사: 12명
담당자: 미정
출시 목표: 11월
after.txt
제안서 초안
사용자 조사: 21명
담당자: 김 담당(가상)
출시 목표: 11월
처음에는 이 가상 문서로 연습하세요. 아래 코드는 파일을 읽어 화면에 출력할 뿐, 외부로 전송하거나 원본을 수정하지 않습니다.
파일 이름은 compare.py입니다. compare.py.txt가 되지 않도록 확인하세요.
from pathlib import Path
from difflib import unified_diff
folder = Path(__file__).resolve().parent
before = (folder / "before.txt").read_text(encoding="utf-8-sig")
after = (folder / "after.txt").read_text(encoding="utf-8-sig")
changes = list(unified_diff(
before.splitlines(), after.splitlines(),
fromfile="before.txt", tofile="after.txt",
n=1, lineterm="",
))
print("\n".join(changes) if changes else "차이 없음(줄 내용 기준)")
그 폴더에서 터미널을 열고 실행합니다.
python compare.py
환경에 따라 python3 compare.py를 사용하세요.
FileNotFoundError: 세 파일의 위치와 이름을 확인합니다.UnicodeDecodeError: 텍스트 파일 두 개를 UTF-8로 다시 저장합니다.조사 인원은 12명 → 21명, 담당자는 미정 → 김 담당(가상)으로 바뀌었습니다. 출시 목표는 그대로입니다. 비교 결과는 변경 위치를 알려줄 뿐입니다. 21명이 맞는지는 조사 자료에서, 담당자가 정해졌는지는 실제 결정 내용에서 확인해야 합니다.
출력의 첫 두 줄은 파일 이름, @@는 비교 범위입니다. 본문에서 -는 원본 줄, +는 수정본 줄이며, 공백으로 시작하는 줄은 바뀌지 않은 문맥입니다.
n=1은 앞뒤 문맥을 한 줄씩 보여줍니다. 문맥 없이 변경 줄만 보려면 n=0으로 바꾸세요. 파일 이름과 비교 범위 표시는 남습니다. 공식 unified_diff 설명

차이 없음(줄 내용 기준)은 파일이 바이트 단위로 같다는 뜻이 아닙니다.
utf-8-sig는 BOM이 있는 UTF-8도 읽습니다. splitlines()와 lineterm=""는 끝 개행이 없어도 출력 줄이 서로 붙지 않게 합니다. BOM 처리 · 줄 분리 동작
2026년 10월 13일 Python 3.12.14에서 비교 사례 12개와 예상 오류 2개를 실행해 모두 기대한 결과를 확인했습니다. 특정 AI 서비스의 성능 시험은 아닙니다.
실제 원고에서는 수치, 날짜, 고유명사, ‘가능하다 → 확정됐다’처럼 주장의 강도가 바뀐 부분부터 확인하세요. 바뀐 줄을 찾은 다음에는 그 변경을 뒷받침하는 근거가 있는지 볼 차례입니다.
| 구글 아르곤 후기, 코딩에 쓰기 전 확인할 3가지 (0) | 2026.10.14 |
|---|---|
| AI 업무 자동화 설계법: 프롬프트에서 검수·재작업까지 (0) | 2026.10.13 |
| Python json.loads 중복 키 검출하기: object_pairs_hook로 입력 거절 (0) | 2026.10.13 |
| ChatGPT에서 AI 영상 만들기, Pollo MCP 연결부터 비용 확인까지 (0) | 2026.10.12 |
| FilmCraft 무료 다운로드, AI 편집 전에 확인할 3가지 (0) | 2026.10.12 |