Hướng dẫn difflib get_close_matches python example - difflib get_close_matches ví dụ về python

Mã nguồn: lib/diffflib.py Lib/difflib.py


Mô -đun này cung cấp các lớp và chức năng để so sánh các chuỗi. Nó có thể được sử dụng ví dụ, để so sánh các tệp và có thể tạo thông tin về sự khác biệt của tệp ở các định dạng khác nhau, bao gồm HTML và bối cảnh và các phân tích hợp nhất. Để so sánh các thư mục và tệp, xem thêm, mô -đun

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

classdifflib.SequenceMatcherdifflib.SequenceMatcher

Đây là một lớp linh hoạt để so sánh các cặp chuỗi thuộc bất kỳ loại nào, miễn là các phần tử trình tự có thể băm. Thuật toán cơ bản có trước, và một chút huyền ảo hơn một thuật toán được xuất bản vào cuối năm 1980 của Ratcliff và Obershelp dưới tên hyperbolic của Gestalt. Ý tưởng là tìm ra các chuỗi phù hợp liên tục dài nhất không chứa các yếu tố rác rưởi của người Viking; Các yếu tố rác của người Viking này là những yếu tố không thú vị theo một nghĩa nào đó, chẳng hạn như các đường trống hoặc khoảng trắng. . Điều này không mang lại các chuỗi chỉnh sửa tối thiểu, nhưng có xu hướng mang lại các trận đấu mà nhìn đúng với mọi người.hashable. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980’s by Ratcliff and Obershelp under the hyperbolic name “gestalt pattern matching.” The idea is to find the longest contiguous matching subsequence that contains no “junk” elements; these “junk” elements are ones that are uninteresting in some sense, such as blank lines or whitespace. (Handling junk is an extension to the Ratcliff and Obershelp algorithm.) The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that “look right” to people.

Thời gian: Thuật toán Ratcliff-Obershelp cơ bản là thời gian khối trong trường hợp xấu nhất và thời gian bậc hai trong trường hợp dự kiến.

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 là thời gian bậc hai cho trường hợp xấu nhất và có hành vi trong trường hợp dự kiến ​​phụ thuộc vào một cách phức tạp về số lượng các yếu tố mà các chuỗi có điểm chung; Thời gian trường hợp tốt nhất là tuyến tính. The basic Ratcliff-Obershelp algorithm is cubic time in the worst case and quadratic time in the expected case.
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear.

Tự động heuristic:

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 hỗ trợ một heuristic tự động coi các mục trình tự nhất định là rác. Các heuristic đếm số lần mỗi mục riêng lẻ xuất hiện trong chuỗi. Nếu một vật phẩm sao chép (sau phần đầu tiên) chiếm hơn 1% trình tự và trình tự dài ít nhất là 200 mục, mặt hàng này được đánh dấu là phổ biến và được coi là rác cho mục đích khớp trình tự. Heuristic này có thể được tắt bằng cách đặt đối số
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
3 thành
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
4 khi tạo
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1.
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 supports a heuristic that automatically treats certain sequence items as junk. The heuristic counts how many times each individual item appears in the sequence. If an item’s duplicates (after the first one) account for more than 1% of the sequence and the sequence is at least 200 items long, this item is marked as “popular” and is treated as junk for the purpose of sequence matching. This heuristic can be turned off by setting the
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
3 argument to
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
4 when creating the
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1.

Mới trong phiên bản 3.2: Tham số Autojunk.The autojunk parameter.

classdifflib.differ¶ difflib.Differ

Đây là một lớp để so sánh các chuỗi các dòng văn bản và tạo ra sự khác biệt hoặc deltas có thể đọc được của con người. Sử dụng khác nhau

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 cả hai để so sánh các chuỗi của các dòng và để so sánh các chuỗi các ký tự trong các dòng tương tự (gần khớp).

Mỗi dòng của một đồng bằng

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
7 bắt đầu với mã hai chữ cái:

Mã số

Nghĩa

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

dòng duy nhất cho chuỗi 1

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

dòng duy nhất cho chuỗi 2

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

dòng chung cho cả hai chuỗi

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

dòng không có trong chuỗi đầu vào

Các dòng bắt đầu bằng ‘

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
2, cố gắng hướng dẫn mắt đến sự khác biệt nội bộ và không có mặt trong chuỗi đầu vào. Những dòng này có thể gây nhầm lẫn nếu các chuỗi chứa các ký tự tab.

classdifflib.htmldiff¶ difflib.HtmlDiff

Lớp này có thể được sử dụng để tạo bảng HTML (hoặc tệp HTML hoàn chỉnh chứa bảng) hiển thị một bên, so sánh dòng của văn bản với các điểm nổi bật thay đổi liên dòng và nội bộ. Bảng có thể được tạo ở chế độ khác biệt đầy đủ hoặc theo ngữ cảnh.

Trình xây dựng cho lớp này là:

__init __ (tabSize = 8, wrapColumn = none, lineJunk = none, charjunk = is_character_junk) ¶(tabsize=8, wrapcolumn=None, linejunk=None, charjunk=IS_CHARACTER_JUNK)

Khởi tạo thể hiện của

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

TabSize là một đối số từ khóa tùy chọn để chỉ định khoảng cách dừng tab và mặc định là

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

WrapColumn là một từ khóa tùy chọn để chỉ định số cột trong đó các dòng bị hỏng và được bọc, mặc định là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5 nơi các dòng không được bọc.

LineJunk và Charjunk là các đối số từ khóa tùy chọn được truyền vào

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
6 (được sử dụng bởi
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
3 để tạo ra sự khác biệt HTML cạnh nhau). Xem tài liệu
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
6 cho các giá trị và mô tả mặc định đối số.

Các phương pháp sau là công khai:

make_file (fromlines, tolines, fromdesc = '', todesc = '', bối cảnh = false, numlines = 5, *, charet = 'utf-8') ¶(fromlines, tolines, fromdesc='', todesc='', context=False, numlines=5, *, charset='utf-8')

So sánh FromLines và Tolines (danh sách các chuỗi) và trả về một chuỗi là tệp HTML hoàn chỉnh chứa bảng hiển thị các dòng khác biệt với các thay đổi liên tuyến và nội bộ được tô sáng.

FromDESC và TODESC là các đối số từ khóa tùy chọn để chỉ định từ/đến các chuỗi tiêu đề cột (cả hai mặc định là một chuỗi trống).

Bối cảnh và số là cả hai đối số từ khóa tùy chọn. Đặt bối cảnh thành

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
9 Khi các khác biệt theo ngữ cảnh sẽ được hiển thị, nếu không mặc định là
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
4 để hiển thị các tệp đầy đủ. NumLines mặc định là
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
1. Khi ngữ cảnh là
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
9 Numlines kiểm soát số lượng các đường ngữ cảnh bao quanh các điểm nổi bật khác biệt. Khi ngữ cảnh là
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
4 Numlines kiểm soát số lượng các dòng được hiển thị trước một điểm nổi bật khác biệt khi sử dụng các siêu liên kết tiếp theo (cài đặt về 0 sẽ khiến cho các siêu liên kết tiếp theo định nghĩa bài văn).

Ghi chú

Fromdesc và Todesc được hiểu là HTML không được phân loại và nên được thoát ra đúng trong khi nhận đầu vào từ các nguồn không tin cậy.

Đã thay đổi trong phiên bản 3.5: Đối số chỉ từ khóa Charset đã được thêm vào. Charset mặc định của tài liệu HTML đã thay đổi từ

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
4 thành
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
5.charset keyword-only argument was added. The default charset of HTML document changed from
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
4 to
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
5.

make_table (fromlines, tolines, fromdesc = '', todesc = '', bối cảnh = false, numlines = 5) ¶(fromlines, tolines, fromdesc='', todesc='', context=False, numlines=5)

So sánh FromLines và Tolines (danh sách các chuỗi) và trả về một chuỗi là bảng HTML hoàn chỉnh hiển thị sự khác biệt theo dòng với các thay đổi liên tuyến và nội bộ được tô sáng.

Các đối số cho phương pháp này giống như các đối số cho phương thức

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

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
7 là một mặt trước dòng lệnh cho lớp này và chứa một ví dụ tốt về việc sử dụng nó.

Difflib.context_diff (a, b, fromfile = '', tofile = '', fromfileDate = '', tofileDate = '', n = 3, lineterm = '\ n')context_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n')

So sánh A và B (danh sách các chuỗi); Trả về một delta (một trình tạo tạo các dòng delta) trong định dạng khác biệt ngữ cảnh.generator generating the delta lines) in context diff format.

Bối cảnh khác nhau là một cách nhỏ gọn để hiển thị các dòng đã thay đổi cộng với một vài dòng ngữ cảnh. Những thay đổi được hiển thị theo kiểu trước/sau. Số lượng các dòng ngữ cảnh được đặt bởi n mặc định là ba.

Theo mặc định, các dòng điều khiển khác biệt (những dòng có

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
8 hoặc
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
9) được tạo ra với một dòng mới. Điều này rất hữu ích để các đầu vào được tạo ra từ
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
0 dẫn đến các khác nhau phù hợp để sử dụng với
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
1 vì cả đầu vào và đầu ra đều có đường dẫn mới.

Đối với các đầu vào không có đường dẫn mới, hãy đặt đối số lineterm thành

>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
2 để đầu ra sẽ không có dòng mới.

Định dạng khác biệt bối cảnh thường có tiêu đề cho tên tệp và thời gian sửa đổi. Bất kỳ hoặc tất cả những thứ này có thể được chỉ định bằng cách sử dụng các chuỗi cho Fromfile, Tofile, FromfileDate và Tofiledate. Thời gian sửa đổi thường được biểu thị theo định dạng ISO 8601. Nếu không được chỉ định, các chuỗi mặc định là chỗ trống.

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

Xem giao diện dòng lệnh để Difflib để biết ví dụ chi tiết hơn.A command-line interface to difflib for a more detailed example.

Difflib.get_close_matches (Word, khả năng, n = 3, cutoff = 0,6) ¶get_close_matches(word, possibilities, n=3, cutoff=0.6)

Trả về một danh sách các trận đấu tốt nhất tốt nhất của người Viking. Word là một chuỗi mà các trận đấu đóng được mong muốn (thường là một chuỗi) và các khả năng là một danh sách các chuỗi để phù hợp với Word (thường là danh sách các chuỗi).

Đối số tùy chọn n (mặc định

>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
3) là số lượng trận đấu gần tối đa để trả về; n phải lớn hơn
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
4.

Cắt đối số tùy chọn (mặc định

>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
5) là một sự nổi trong phạm vi [0, 1]. Khả năng mà don ghi điểm ít nhất là tương tự như từ bị bỏ qua.

Các trận đấu tốt nhất (không quá n) trong số các khả năng được trả lại trong một danh sách, được sắp xếp theo điểm tương tự, đầu tiên tương tự nhất.

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

Difflib.ndiff (a, b, linejunk = none, charjunk = is_character_junk) ¶ndiff(a, b, linejunk=None, charjunk=IS_CHARACTER_JUNK)

So sánh A và B (danh sách các chuỗi); Trả về một đồng bằng kiểu ____ 27 (một trình tạo tạo các đường delta).generator generating the delta lines).

Tham số từ khóa tùy chọn LineJunk và Charjunk đang lọc các chức năng (hoặc

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

LineJunk: Một hàm chấp nhận một đối số chuỗi duy nhất và trả về true nếu chuỗi là rác hoặc sai nếu không. Mặc định là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5. Ngoài ra còn có một hàm cấp mô-đun
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
9, trong đó lọc ra các dòng không có ký tự có thể nhìn thấy, ngoại trừ nhiều nhất một ký tự (
>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
0)-tuy nhiên lớp ____21 cơ bản không phân tích năng động trong đó các dòng thường xuyên như vậy để tạo thành tiếng ồn và Điều này thường hoạt động tốt hơn so với sử dụng chức năng này.

Charjunk: Một hàm chấp nhận một ký tự (một chuỗi có độ dài 1) và trả về nếu ký tự là rác hoặc sai nếu không. Mặc định là hàm cấp độ mô-đun

>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
2, lọc ra các ký tự khoảng trắng (một cái trống hoặc tab; đó là một ý tưởng tồi để đưa dòng mới vào việc này!).

>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
3 là một mặt trước dòng lệnh cho chức năng này.

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

Difflib.Restore (trình tự, mà) ¶restore(sequence, which)

Trả về một trong hai chuỗi tạo ra một đồng bằng.

Đưa ra một chuỗi được tạo bởi

>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
4 hoặc
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
6, trích xuất các dòng có nguồn gốc từ tệp 1 hoặc 2 (tham số), tước tiền tố dòng.

Example:

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

Difflib.Unified_diff (a, b, fromfile = '', tofile = '', fromfileDate = '', tofileDate = '', n = 3, lineterm = '\ n')unified_diff(a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n')

So sánh A và B (danh sách các chuỗi); Trả về một delta (một trình tạo tạo các dòng delta) ở định dạng diff hợp nhất.generator generating the delta lines) in unified diff format.

Khác biệt thống nhất là một cách nhỏ gọn để hiển thị các dòng đã thay đổi cộng với một vài dòng ngữ cảnh. Các thay đổi được hiển thị theo kiểu nội tuyến (thay vì riêng biệt trước/sau các khối). Số lượng các dòng ngữ cảnh được đặt bởi n mặc định là ba.

Theo mặc định, các dòng điều khiển khác biệt (những dòng có

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
9,
>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
7 hoặc
>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
8) được tạo ra với một dòng mới. Điều này rất hữu ích để các đầu vào được tạo ra từ
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
0 dẫn đến các khác nhau phù hợp để sử dụng với
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
1 vì cả đầu vào và đầu ra đều có đường dẫn mới.

Đối với các đầu vào không có đường dẫn mới, hãy đặt đối số lineterm thành

>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
2 để đầu ra sẽ không có dòng mới.

Định dạng khác biệt bối cảnh thường có tiêu đề cho tên tệp và thời gian sửa đổi. Bất kỳ hoặc tất cả những thứ này có thể được chỉ định bằng cách sử dụng các chuỗi cho Fromfile, Tofile, FromfileDate và Tofiledate. Thời gian sửa đổi thường được biểu thị theo định dạng ISO 8601. Nếu không được chỉ định, các chuỗi mặc định là chỗ trống.

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

Xem giao diện dòng lệnh để Difflib để biết ví dụ chi tiết hơn.A command-line interface to difflib for a more detailed example.

Difflib.Diff_Bytes (dfunc, a, b, fromfile = b '', tofile = b '', fromfileDate = b '', tofiledate = b '', n = 3, lineterm = b '\ n')diff_bytes(dfunc, a, b, fromfile=b'', tofile=b'', fromfiledate=b'', tofiledate=b'', n=3, lineterm=b'\n')

So sánh A và B (danh sách các đối tượng byte) bằng cách sử dụng DFUNC; mang lại một chuỗi các dòng delta (cũng byte) trong định dạng được trả về bởi dfunc. DFUNC phải là một người có thể gọi, thường là

>>> s = SequenceMatcher(None, "abxcd", "abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]
2 hoặc
>>> s = SequenceMatcher(None, "abxcd", "abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]
3.

Cho phép bạn so sánh dữ liệu với mã hóa không xác định hoặc không nhất quán. Tất cả các đầu vào ngoại trừ n phải là đối tượng byte, không phải str. Hoạt động bằng cách chuyển đổi tất cả các đầu vào (ngoại trừ N) sang STR và gọi

>>> s = SequenceMatcher(None, "abxcd", "abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]
4. Đầu ra của DFUNC sau đó được chuyển đổi trở lại thành byte, do đó các dòng delta mà bạn nhận được có cùng một mã hóa chưa biết/không nhất quán như A và B.

Mới trong phiên bản 3.5.

Difflib.is_line_junk (dòng) ¶IS_LINE_JUNK(line)

Trả lại

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
9 cho các dòng Ignito. Đường dây có thể xác định được nếu dòng trống hoặc chứa một
>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)
0, nếu không nó không thể bỏ được. Được sử dụng làm mặc định cho tham số LineJunk trong
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
6 trong các phiên bản cũ hơn.

Difflib.is_character_junk (CH) ¶IS_CHARACTER_JUNK(ch)

Trả về

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
9 cho các ký tự không thể tin được. Nhân vật CH là đáng tin cậy nếu CH là một không gian hoặc tab, nếu không nó không thể xác định được. Được sử dụng làm mặc định cho tham số charjunk trong
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
6.

Sequencematcher Objects¶

Lớp

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 có hàm tạo này:

classDifflib.SequenceMatcher (isjunk = none, a = '', b = '', autojunk = true) ¶difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

Đối số tùy chọn isjunk phải là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5 (mặc định) hoặc hàm một đối tượng có phần tử trình tự và trả về đúng khi và chỉ khi phần tử là rác rưởi và nên bị bỏ qua. Vượt qua
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5 cho Isjunk tương đương với việc vượt qua
>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'
3; Nói cách khác, không có yếu tố nào bị bỏ qua. Ví dụ, vượt qua:

Nếu bạn so sánh các dòng như các chuỗi nhân vật và don don muốn đồng bộ hóa trên các khoảng trống hoặc các tab cứng.

Các đối số tùy chọn A và B là các chuỗi được so sánh; Cả hai mặc định là các chuỗi trống. Các yếu tố của cả hai chuỗi phải được băm.hashable.

Đối số tùy chọn Autojunk có thể được sử dụng để vô hiệu hóa heuristic rác tự động.

Mới trong phiên bản 3.2: Tham số Autojunk.The autojunk parameter.

Các đối tượng SequenCematcher nhận được ba thuộc tính dữ liệu: Bjunk là tập hợp các phần tử của B mà Isjunk là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
9; Bpopular là tập hợp các yếu tố không junk được coi là phổ biến bởi heuristic (nếu nó không bị vô hiệu hóa); B2J là một bản đồ Dicting các yếu tố còn lại của B cho một danh sách các vị trí nơi chúng xảy ra. Cả ba đều được đặt lại bất cứ khi nào B được đặt lại với
>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'
5 hoặc
>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'
6.

Mới trong phiên bản 3.2: Các thuộc tính bjunk và bpopular.The bjunk and bpopular attributes.

Đối tượng

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 có các phương pháp sau:

set_seqs (a, b) ¶(a, b)

Đặt hai chuỗi để được so sánh.

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
1 Tính toán và lưu trữ thông tin chi tiết về chuỗi thứ hai, vì vậy nếu bạn muốn so sánh một chuỗi với nhiều chuỗi, hãy sử dụng
>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'
6 để đặt chuỗi thường được sử dụng một lần và gọi
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
0 nhiều lần, một lần cho mỗi chuỗi khác.

set_seq1 (a)(a)

Đặt chuỗi đầu tiên được so sánh. Trình tự thứ hai được so sánh không thay đổi.

set_seq2 (b) ¶(b)

Đặt chuỗi thứ hai được so sánh. Trình tự đầu tiên được so sánh không thay đổi.

find_longest_match (alo = 0, ahi = none, blo = 0, bhi = none) ¶(alo=0, ahi=None, blo=0, bhi=None)

Tìm khối phù hợp nhất trong

>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
1 và
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
2.

Nếu Isjunk bị bỏ qua hoặc

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5,
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
4 trả về
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
5 sao cho
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
6 bằng
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
7, trong đó
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
8 và
>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
9. Đối với tất cả
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
00 đáp ứng các điều kiện đó, các điều kiện bổ sung
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
01,
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
02 và nếu
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
03,
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
04 cũng được đáp ứng. Nói cách khác, trong tất cả các khối phù hợp tối đa, trả về một khối bắt đầu sớm nhất trong A và của tất cả các khối phù hợp tối đa bắt đầu sớm nhất trong A, trả lại một khối bắt đầu sớm nhất trong b.

>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)

Nếu Isjunk được cung cấp, đầu tiên là khối phù hợp nhất được xác định như trên, nhưng với hạn chế bổ sung rằng không có phần tử rác nào xuất hiện trong khối. Sau đó, khối đó được mở rộng càng xa càng tốt bằng cách khớp (chỉ) các phần tử rác ở cả hai bên. Vì vậy, khối kết quả không bao giờ khớp với rác trừ khi rác giống hệt nhau xảy ra với một trận đấu thú vị.

Ở đây, ví dụ tương tự như trước đây, nhưng coi chỗ trống là rác. Điều đó ngăn chặn

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
05 khớp trực tiếp với
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
05 ở đầu đuôi của chuỗi thứ hai. Thay vào đó, chỉ có
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
07 có thể khớp và khớp với
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
07 ngoài cùng bên trái trong chuỗi thứ hai:

>>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=1, b=0, size=4)

Nếu không có khối khớp, điều này sẽ trả về

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

Phương thức này trả về một tuple có tên

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

Đã thay đổi trong phiên bản 3.9: Đã thêm các đối số mặc định.Added default arguments.

get_matching_blocks ()()

Danh sách trả lại của bộ ba mô tả các chuỗi phù hợp không chồng chéo. Mỗi bộ ba có dạng

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
11, và có nghĩa là
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
12. Bộ ba đang tăng đơn điệu trong I và J.

Triple cuối cùng là một hình nộm, và có giá trị

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
13. Đây là bộ ba duy nhất với
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
14. Nếu
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
11 và
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
16 là bộ ba liền kề trong danh sách và lần thứ hai không phải là bộ ba cuối cùng trong danh sách, thì
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
17 hoặc
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
18; Nói cách khác, bộ ba liền kề luôn mô tả các khối không liên kết.

>>> s = SequenceMatcher(None, "abxcd", "abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]

get_opcodes ()()

Danh sách trả lại của 5 bộ phận mô tả cách biến a thành b. Mỗi tuple có dạng

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
19. Tuple đầu tiên có
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
20 và các bộ dữ liệu còn lại có i1 bằng i2 từ tuple trước đó, và, tương tự, J1 bằng với J2 trước đó.

Các giá trị thẻ là các chuỗi, với các ý nghĩa sau:

Giá trị

Nghĩa

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
22 nên được thay thế bằng
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
23.

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
22 nên bị xóa. Lưu ý rằng
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
26 trong trường hợp này.

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
23 nên được chèn vào
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
29. Lưu ý rằng
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
30 trong trường hợp này.

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
32 (các chuỗi con bằng nhau).

Ví dụ:

>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'

get_grouped_opcodes (n = 3) ¶(n=3)

Trả về một trình tạo của các nhóm với các dòng N của bối cảnh.generator of groups with up to n lines of context.

Bắt đầu với các nhóm được trả về bởi

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
33, phương pháp này chia ra các cụm thay đổi nhỏ hơn và loại bỏ các phạm vi can thiệp không có thay đổi.

Các nhóm được trả lại ở cùng định dạng với

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

tỉ lệ()¶()

Trả về một thước đo của các chuỗi tương tự như một sự nổi trong phạm vi [0, 1].

Trong đó t là tổng số phần tử trong cả hai chuỗi và M là số lượng trận đấu, thì đây là 2.0*M / T. Lưu ý rằng đây là

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
35 nếu các chuỗi giống hệt nhau và
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
36 nếu chúng không có điểm chung.

Điều này là tốn kém để tính toán nếu

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
37 hoặc
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
33 đã được gọi, trong trường hợp đó bạn có thể muốn thử
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
39 hoặc
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
40 trước tiên để có giới hạn trên.

Ghi chú

THẬN TRỌNG: Kết quả của một cuộc gọi

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41 có thể phụ thuộc vào thứ tự của các đối số. Ví dụ:

>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5

Quick_ratio ()()

Trả về một giới hạn trên trên

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41 tương đối nhanh chóng.

Real_quick_ratio ()()

Trả lại một giới hạn trên trên

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41 rất nhanh.

Ba phương pháp trả về tỷ lệ khớp với tổng số ký tự có thể cho kết quả khác nhau do mức độ xấp xỉ khác nhau, mặc dù

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
39 và
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
40 luôn luôn lớn nhất là
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41:

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

SERECENCEMATCHER ví dụ ex

Ví dụ này so sánh hai chuỗi, coi khoảng trống là rác rưởi:

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41 trả về một phao trong [0, 1], đo độ tương tự của các chuỗi. Theo nguyên tắc thông thường, giá trị
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
41 trên 0,6 có nghĩa là các chuỗi là các kết quả gần nhau:

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

Nếu bạn chỉ quan tâm đến nơi các chuỗi khớp,

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
37 rất tiện dụng:

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

Lưu ý rằng bộ tuple cuối cùng được trả về bởi

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
37 luôn là một hình nộm,
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
13 và đây là trường hợp duy nhất trong đó phần tử tuple cuối cùng (số lượng phần tử khớp) là
>>> s = SequenceMatcher(None, " abcd", "abcd abcd")
>>> s.find_longest_match(0, 5, 0, 9)
Match(a=0, b=4, size=5)
4.

Nếu bạn muốn biết cách thay đổi chuỗi thứ nhất thành phần thứ hai, hãy sử dụng

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

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

Xem thêm

  • Hàm

    >>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
    ['apple', 'ape']
    >>> import keyword
    >>> get_close_matches('wheel', keyword.kwlist)
    ['while']
    >>> get_close_matches('pineapple', keyword.kwlist)
    []
    >>> get_close_matches('accept', keyword.kwlist)
    ['except']
    
    54 trong mô -đun này cho thấy cách xây dựng mã đơn giản trên
    >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
    ...              'ore\ntree\nemu\n'.splitlines(keepends=True))
    >>> print(''.join(diff), end="")
    - one
    ?  ^
    + ore
    ?  ^
    - two
    - three
    ?  -
    + tree
    + emu
    
    1 có thể được sử dụng để thực hiện công việc hữu ích.

  • Công thức điều khiển phiên bản đơn giản cho một ứng dụng nhỏ được xây dựng với

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

Đối tượng khác nhau

Lưu ý rằng Deltas do ____ 27 tạo ra không có yêu cầu là khác nhau tối thiểu. Ngược lại, các khác biệt tối thiểu thường phản trực giác, bởi vì chúng đồng bộ bất cứ nơi nào có thể, đôi khi các trận đấu ngẫu nhiên cách nhau 100 trang. Hạn chế các điểm đồng bộ cho các trận đấu liền kề bảo tồn một số khái niệm về địa phương, với chi phí thường xuyên để tạo ra một sự khác biệt dài hơn.minimal diffs. To the contrary, minimal diffs are often counter-intuitive, because they synch up anywhere possible, sometimes accidental matches 100 pages apart. Restricting synch points to contiguous matches preserves some notion of locality, at the occasional cost of producing a longer diff.

Lớp

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
7 có hàm tạo này:

classdifflib.differ (linejunk = none, charjunk = none) difflib.Differ(linejunk=None, charjunk=None)

Tham số từ khóa tùy chọn LineJunk và Charjunk dành cho các chức năng bộ lọc (hoặc

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

LineJunk: Một hàm chấp nhận một đối số chuỗi duy nhất và trả về true nếu chuỗi là rác. Mặc định là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5, có nghĩa là không có dòng nào được coi là rác.

Charjunk: Một hàm chấp nhận một đối số ký tự duy nhất (một chuỗi có độ dài 1) và trả về đúng nếu ký tự là rác. Mặc định là

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print(''.join(restore(diff, 1)), end="")
one
two
three
>>> print(''.join(restore(diff, 2)), end="")
ore
tree
emu
5, có nghĩa là không có ký tự nào được coi là rác.

Các chức năng lọc rác này tăng tốc độ phù hợp để tìm sự khác biệt và không khiến bất kỳ dòng hoặc ký tự khác nhau nào bị bỏ qua. Đọc mô tả của phương thức

>>> SequenceMatcher(None, 'tide', 'diet').ratio()
0.25
>>> SequenceMatcher(None, 'diet', 'tide').ratio()
0.5
4 tham số Isjunk isjunk để giải thích.

Các đối tượng

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
7 được sử dụng (Deltas được tạo) thông qua một phương thức duy nhất:

So sánh (a, b)(a, b)

So sánh hai chuỗi các dòng và tạo ra Delta (một chuỗi các dòng).

Mỗi chuỗi phải chứa các chuỗi một dòng riêng lẻ kết thúc bằng các dòng mới. Các chuỗi như vậy có thể được lấy từ phương thức

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
64 của các đối tượng giống như tệp. Delta được tạo cũng bao gồm các chuỗi kết thúc mới, sẵn sàng để được in AS-IS thông qua phương thức
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
65 của một đối tượng giống như tệp.

Ví dụ khác nhau

Ví dụ này so sánh hai văn bản. Đầu tiên, chúng tôi thiết lập các văn bản, chuỗi các chuỗi một dòng riêng lẻ kết thúc bằng các dòng mới (các chuỗi như vậy cũng có thể được lấy từ phương thức

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
64 của các đối tượng giống như tệp):

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

Tiếp theo, chúng tôi khởi tạo một đối tượng khác:

Lưu ý rằng khi khởi tạo một đối tượng

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
...              'ore\ntree\nemu\n'.splitlines(keepends=True))
>>> print(''.join(diff), end="")
- one
?  ^
+ ore
?  ^
- two
- three
?  -
+ tree
+ emu
7, chúng ta có thể truyền các chức năng để lọc dòng và ký tự của rác. Xem Trình xây dựng
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
68 để biết chi tiết.

Cuối cùng, chúng tôi so sánh hai:

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

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('pineapple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
69 là một danh sách các chuỗi, vì vậy hãy để bản in rất đẹp:

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

Như một chuỗi đa dòng duy nhất, nó trông như thế này:

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

Giao diện dòng lệnh cho Difflib¶

Ví dụ này cho thấy cách sử dụng Difflib để tạo ra một tiện ích giống như ____ 170. Nó cũng được chứa trong phân phối nguồn Python, như

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

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