Python 기본 시퀀스 비교 difflib 라이브러리 알아보기

오늘은 Python에서 HTML 및 context와 unified diff 정보를 생성할 수 있는 difflib 라이브러리를 알아보려 합니다.

difflib 설치

파이썬에 기본적으로 설치되어 있습니다.

context_diff

import difflib
import sys

difflib와 sys를 가져옵니다.

original = ['python\n', 'java\n', 'go\n']
edited = ['pythonic\n', 'javachip\n', 'go\n']

문자열 리스트들을 만듭니다.

sys.stdout.writelines(difflib.context_diff(original, edited, fromfile='original.py', tofile='edit.py'))

리스트들을 문맥별 달라진 제네레이터로 차이점으로 보여줍니다.

ndiff

import difflib

difflib를 가져옵니다.

n = difflib.ndiff("""
python
java
go""".splitlines(keepends=True),

"""
pythonic
javachip
go""".splitlines(keepends=True))
print(''.join(n), end="")

문자열의 리스트를 비교하여 제네레이터로 만들어 차이점을 보여줍니다.

unified_diff

import difflib
import sys

difflib와 sys를 가져옵니다.

original = ['python\n', 'java\n', 'go\n']
edited = ['pythonic\n', 'javachip\n', 'go\n']

문자열 리스트들을 만듭니다.

sys.stdout.writelines(difflib.unified_diff(original, edited, fromfile='before.py', tofile='after.py'))

문자열 리스트을 비교하여 제네레이터로 차이점을 보여줍니다.

compare

import difflib

difflib를 가져옵니다.

text_1 = """
#include <iostream>
int main() 
{
    return 0;
}""".splitlines(keepends=True)

text_2 = """
#include <iostream>
using namespace std;
int main() 
{
    cout << "Hello, World!";
    return 0;
}""".splitlines(keepends=True)

문자열을 줄 별로 나누어 변수에 대입합니다.

diff = difflib.Differ()

result = list(diff.compare(text_1, text_2))
print(result)

Differ 객체로 두 문자열을 비교하는 diff.compare를 사용할 수 있습니다.

Written on July 5, 2019