>백엔드 개발 >파이썬 튜토리얼 >Python difflib 모듈에 대한 자세한 설명

Python difflib 모듈에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-09-15 10:45:356097검색

이 문서에서는 특정 참조 값이 있는 Python difflib 모듈의 예를 주로 소개합니다. 관심 있는 친구는 시퀀스의 차등 비교를 위해

difflib 모듈에서 제공하는 클래스와 메서드를 참조할 수 있습니다. 텍스트 또는 HTML 형식의 차이점 비교 페이지 디렉터리를 비교해야 하는 경우 filecmp 모듈을 사용할 수 있습니다.

class difflib.SequenceMatcher

이 클래스는 임의의 해시 가능 유형의 시퀀스 쌍을 비교하는 방법을 제공합니다. 이 방법은 '쓰레기' 요소를 포함하지 않는 가장 큰 연속 일치 시퀀스를 찾습니다.

알고리즘의 복잡도를 비교해 보면 원래의 게슈탈트 매칭 알고리즘으로 인해 최악의 경우 n제곱 연산을 하고, 최상의 경우에는 선형 효율성을 가집니다.

조각의 1% 이상 반복되거나 200회 반복되는 문자를 가비지로 처리할 수 있는 자동 가비지 휴리스틱 기능이 있습니다. 이 기능은 autojunk를 false로 설정하여 끌 수 있습니다.

class difflib.Differ

이 클래스는 텍스트 줄의 차이를 비교하여 사람이 읽기에 적합한 차이 결과 또는 증분 결과를 생성합니다. 결과의 각 부분에 대한 표현은 다음과 같습니다.

Python difflib 모듈에 대한 자세한 설명

class difflib.HtmlDiff

이 클래스는 비교 결과를 양쪽에 표시하거나 행별로 표시하는 HTML 테이블(또는 테이블이 포함된 HTML 파일)을 만드는 데 사용할 수 있습니다.

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

위의 두 가지 방법 모두 비교 결과가 포함된 테이블이 포함된 html 파일을 생성하는 데 사용할 수 있으며 내용의 일부가 강조 표시됩니다.

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

a와 b(문자열 목록)를 비교하고 A 생성기를 반환합니다. 텍스트 줄 비교용
예:


>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...   sys.stdout.write(line) 
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
 guido
--- 1,4 ----
! python
! eggy
! hamster
 guido

difflib.get_close_matches(word, 가능성[, n][, cutoff])

최대 일치 결과 목록을 반환합니다

예:


>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']

difflib.ndiff(a, b[, linejunk][, charjunk])

a와 b(문자열 목록)를 비교하고 Differ 스타일 차이 결과를 반환합니다.
예:


>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> print ''.join(diff),
- one
? ^
+ ore
? ^
- two
- three
? -
+ tree
+ emu

difflib. 복원(시퀀스, which)

두 개의 정렬된 시퀀스로 생성된 결과를 반환합니다. ][, n][, lineterm])

a와 b(문자열 목록)를 비교하고 통합 diff 형식으로 차이 결과를 반환합니다.


예:

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print ''.join(restore(diff, 1)),
one
two
three
>>> print ''.join(restore(diff, 2)),
ore
tree
emu

실제 적용 예


두 파일 비교 , 그리고 차이 결과를 보여주는 HTML 파일을 생성합니다

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...  sys.stdout.write(line) 
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido

실행 결과:

생성된 HTML 파일 비교 결과:


위 내용은 Python difflib 모듈에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.