[Python] 두개의 문자열 비교하는 방법 : 같음, 다름, 관계 연산 이해하기에서 문자열을 비교하는 다양한 방법을 알아 보았다. 이제 우리는 더 긴 텍스트 조각을 살펴보고 정확한 차이점을 집어내기 위한 단계를 밟고 있다. 이 포스트에서는 파이썬의 difflib
모듈을 활용하여 상당량의 텍스트를 분석하고 비교하는 과정을 안내할 것이며, 복잡한 데이터 비교를 다루는 데 있어 매우 멋진 도구가 될 것이다.
difflib
모듈의 SequenceMatcher
클래스는 두 문자열을 비교하고 그 사이의 유사도 비율을 확인할 수 있다.
from difflib import SequenceMatcher
string1 = "The sun rises in the east\nA stitch in time saves nine\nAll that glitters is not gold"
string2 = "The sun sets in the west\nA stitch in time saves nine\nAll that shines is not gold\n"
s = SequenceMatcher(None, string1, string2)
similarity_ratio = s.ratio()
print(similarity_ratio) # 출력: 0.9146341463414634
이 코드 조각은 두 문자열을 비교하고 유사도 비율을 얻는 방법을 보여주며, 텍스트 간의 미세한 차이를 신속하게 파악하는 편리한 방법이다.
difflib
모듈의 Differ
클래스는 더 큰 텍스트 문서를 줄 단위로 비교할 수 있다.
from difflib import Differ
string1 = "The sun rises in the east\nA stitch in time saves nine\nAll that glitters is not gold"
string2 = "The sun sets in the west\nA stitch in time saves nine\nAll that shines is not gold\n"
text1 = string1.split('\n')
text2 = string2.split('\n')
d = Differ()
diff = d.compare(text1, text2)
print('\n'.join(diff))
출력
- The sun rises in the east
? -- -
+ The sun sets in the west
? + +
A stitch in time saves nine
- All that glitters is not gold
? ^^ ^^ -
+ All that shines is not gold
? ^^ ^
주어진 코드 조각에서, difflib
모듈의 Differ
클래스는 text1
과 text2
라는 두 문자열 리스트를 비교하는 데 사용된다. 코드의 출력은 두 리스트 간의 차이점을 강조하며, 각 차이의 성격을 지시하는 특정 기호를 사용한다.
-
로 시작하는 줄은 text1
에 있고 text2
에 없는 요소를 나타낸다.+
로 시작하는 줄은 text2
에 있고 text1
에 없는 요소를 나타낸다.?
로 시작하는 줄은 줄 내의 변화를 특정 위치에서 나타내며, 변화가 발생한 곳을 강조하기 위해 다른 문자를 사용한다.제공된 출력을 분석해 보자:
-
줄은 "The sun rises in the east"가 text1
에 있고 text2
에 없음을 나타낸다. +
줄은 "The sun sets in the west"가 text2
에 있고 text1
에 없음을 나타낸다. ?
줄은 정확히 변화한 문자를 지정한다.text1
과 text2
모두에서 동일하므로 시작 부분에 기호가 없다.-
, +
, ?
줄은 "All that glitters is not gold"가 text1
에서 "All that shines is not gold"로 text2
에서 대체되었음을 보여주며, 특정 변화를 강조한다.difflib
모듈은 텍스트 줄의 시퀀스를 비교하기 위한 것이다.difflib
모듈은 버전 2.1부터 파이썬 표준 라이브러리에서 사용할 수 있다.difflib
모듈의 HtmlDiff
클래스를 사용하여 HTML 양옆비교 표를 생성할 수 있다.Differ
와 같은 클래스는 비교가 수행되는 방식과 출력이 생성되는 방식을 사용자 정의하는 옵션을 제공한다.difflib.get_opcodes()
메소드를 사용하여 변화 블록에 대한 정보를 얻을 수 있으며, 큰 텍스트에 유용할 수 있다.[Python] 비트 연산자 다양한 예제를 통해 이해하기 |
---|
[Python] 관계 연산자 다양한 예제를 통해 이해하기 |
[Python] 'zsh: command not found: python' 오류 해결하기 |
[Python] 할당 연산자 다양한 예제를 통해 이해하기 |
[Python] 산술 연산자 다양한 예제를 통해 이해하기 |
CloneCoding
한 줄의 코드에서 시작되는 혁신!