Mercurial > cpython-lru_cache-weakref
annotate Doc/library/difflib.rst @ 58765:2ba7677bfa95 legacy-trunk
testCopysign was defined twice in test_math; combine the definitions
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Sat, 06 Feb 2010 23:11:25 +0000 |
| parents | 2b3945d755a7 |
| children | 713f1f6bf339 |
| rev | line source |
|---|---|
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
1 :mod:`difflib` --- Helpers for computing deltas |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
2 =============================================== |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
3 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
4 .. module:: difflib |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
5 :synopsis: Helpers for computing differences between objects. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
6 .. moduleauthor:: Tim Peters <tim_one@users.sourceforge.net> |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
7 .. sectionauthor:: Tim Peters <tim_one@users.sourceforge.net> |
|
44383
3625234bf3d2
Some cleanup in the docs.
Georg Brandl <georg@python.org>
parents:
43753
diff
changeset
|
8 .. Markup by Fred L. Drake, Jr. <fdrake@acm.org> |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
9 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
10 .. testsetup:: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
11 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
12 import sys |
|
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
13 from difflib import * |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
14 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
15 .. versionadded:: 2.1 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
16 |
|
43598
96af41e50e56
Added a cross-ref to each other.
Mark Summerfield <list@qtrac.plus.com>
parents:
42604
diff
changeset
|
17 This module provides classes and functions for comparing sequences. It |
|
96af41e50e56
Added a cross-ref to each other.
Mark Summerfield <list@qtrac.plus.com>
parents:
42604
diff
changeset
|
18 can be used for example, for comparing files, and can produce difference |
|
96af41e50e56
Added a cross-ref to each other.
Mark Summerfield <list@qtrac.plus.com>
parents:
42604
diff
changeset
|
19 information in various formats, including HTML and context and unified |
|
96af41e50e56
Added a cross-ref to each other.
Mark Summerfield <list@qtrac.plus.com>
parents:
42604
diff
changeset
|
20 diffs. For comparing directories and files, see also, the :mod:`filecmp` module. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
21 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
22 .. class:: SequenceMatcher |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
23 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
24 This is a flexible class for comparing pairs of sequences of any type, so long |
|
43753
4b3623568e6c
Make "hashable" a glossary entry and clarify docs on __cmp__, __eq__ and __hash__.
Georg Brandl <georg@python.org>
parents:
43629
diff
changeset
|
25 as the sequence elements are :term:`hashable`. The basic algorithm predates, and is a |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
26 little fancier than, an algorithm published in the late 1980's by Ratcliff and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
27 Obershelp under the hyperbolic name "gestalt pattern matching." The idea is to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
28 find the longest contiguous matching subsequence that contains no "junk" |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
29 elements (the Ratcliff and Obershelp algorithm doesn't address junk). The same |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
30 idea is then applied recursively to the pieces of the sequences to the left and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
31 to the right of the matching subsequence. This does not yield minimal edit |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
32 sequences, but does tend to yield matches that "look right" to people. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
33 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
34 **Timing:** The basic Ratcliff-Obershelp algorithm is cubic time in the worst |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
35 case and quadratic time in the expected case. :class:`SequenceMatcher` is |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
36 quadratic time for the worst case and has expected-case behavior dependent in a |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
37 complicated way on how many elements the sequences have in common; best case |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
38 time is linear. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
39 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
40 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
41 .. class:: Differ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
42 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
43 This is a class for comparing sequences of lines of text, and producing |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
44 human-readable differences or deltas. Differ uses :class:`SequenceMatcher` |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
45 both to compare sequences of lines, and to compare sequences of characters |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
46 within similar (near-matching) lines. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
47 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
48 Each line of a :class:`Differ` delta begins with a two-letter code: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
49 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
50 +----------+-------------------------------------------+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
51 | Code | Meaning | |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
52 +==========+===========================================+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
53 | ``'- '`` | line unique to sequence 1 | |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
54 +----------+-------------------------------------------+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
55 | ``'+ '`` | line unique to sequence 2 | |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
56 +----------+-------------------------------------------+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
57 | ``' '`` | line common to both sequences | |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
58 +----------+-------------------------------------------+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
59 | ``'? '`` | line not present in either input sequence | |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
60 +----------+-------------------------------------------+ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
61 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
62 Lines beginning with '``?``' attempt to guide the eye to intraline differences, |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
63 and were not present in either input sequence. These lines can be confusing if |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
64 the sequences contain tab characters. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
65 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
66 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
67 .. class:: HtmlDiff |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
68 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
69 This class can be used to create an HTML table (or a complete HTML file |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
70 containing the table) showing a side by side, line by line comparison of text |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
71 with inter-line and intra-line change highlights. The table can be generated in |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
72 either full or contextual difference mode. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
73 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
74 The constructor for this class is: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
75 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
76 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
77 .. function:: __init__([tabsize][, wrapcolumn][, linejunk][, charjunk]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
78 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
79 Initializes instance of :class:`HtmlDiff`. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
80 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
81 *tabsize* is an optional keyword argument to specify tab stop spacing and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
82 defaults to ``8``. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
83 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
84 *wrapcolumn* is an optional keyword to specify column number where lines are |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
85 broken and wrapped, defaults to ``None`` where lines are not wrapped. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
86 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
87 *linejunk* and *charjunk* are optional keyword arguments passed into ``ndiff()`` |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
88 (used by :class:`HtmlDiff` to generate the side by side HTML differences). See |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
89 ``ndiff()`` documentation for argument default values and descriptions. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
90 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
91 The following methods are public: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
92 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
93 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
94 .. function:: make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
95 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
96 Compares *fromlines* and *tolines* (lists of strings) and returns a string which |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
97 is a complete HTML file containing a table showing line by line differences with |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
98 inter-line and intra-line changes highlighted. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
99 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
100 *fromdesc* and *todesc* are optional keyword arguments to specify from/to file |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
101 column header strings (both default to an empty string). |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
102 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
103 *context* and *numlines* are both optional keyword arguments. Set *context* to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
104 ``True`` when contextual differences are to be shown, else the default is |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
105 ``False`` to show the full files. *numlines* defaults to ``5``. When *context* |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
106 is ``True`` *numlines* controls the number of context lines which surround the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
107 difference highlights. When *context* is ``False`` *numlines* controls the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
108 number of lines which are shown before a difference highlight when using the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
109 "next" hyperlinks (setting to zero would cause the "next" hyperlinks to place |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
110 the next difference highlight at the top of the browser without any leading |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
111 context). |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
112 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
113 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
114 .. function:: make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
115 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
116 Compares *fromlines* and *tolines* (lists of strings) and returns a string which |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
117 is a complete HTML table showing line by line differences with inter-line and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
118 intra-line changes highlighted. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
119 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
120 The arguments for this method are the same as those for the :meth:`make_file` |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
121 method. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
122 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
123 :file:`Tools/scripts/diff.py` is a command-line front-end to this class and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
124 contains a good example of its use. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
125 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
126 .. versionadded:: 2.4 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
127 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
128 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
129 .. function:: context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
130 |
|
43629
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
131 Compare *a* and *b* (lists of strings); return a delta (a :term:`generator` |
|
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
132 generating the delta lines) in context diff format. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
133 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
134 Context diffs are a compact way of showing just the lines that have changed plus |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
135 a few lines of context. The changes are shown in a before/after style. The |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
136 number of context lines is set by *n* which defaults to three. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
137 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
138 By default, the diff control lines (those with ``***`` or ``---``) are created |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
139 with a trailing newline. This is helpful so that inputs created from |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
140 :func:`file.readlines` result in diffs that are suitable for use with |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
141 :func:`file.writelines` since both the inputs and outputs have trailing |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
142 newlines. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
143 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
144 For inputs that do not have trailing newlines, set the *lineterm* argument to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
145 ``""`` so that the output will be uniformly newline free. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
146 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
147 The context diff format normally has a header for filenames and modification |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
148 times. Any or all of these may be specified using strings for *fromfile*, |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
149 *tofile*, *fromfiledate*, and *tofiledate*. The modification times are normally |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
150 expressed in the format returned by :func:`time.ctime`. If not specified, the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
151 strings default to blanks. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
152 |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
153 >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
154 >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
155 >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
156 ... sys.stdout.write(line) # doctest: +NORMALIZE_WHITESPACE |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
157 *** before.py |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
158 --- after.py |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
159 *************** |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
160 *** 1,4 **** |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
161 ! bacon |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
162 ! eggs |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
163 ! ham |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
164 guido |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
165 --- 1,4 ---- |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
166 ! python |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
167 ! eggy |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
168 ! hamster |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
169 guido |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
170 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
171 See :ref:`difflib-interface` for a more detailed example. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
172 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
173 .. versionadded:: 2.3 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
174 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
175 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
176 .. function:: get_close_matches(word, possibilities[, n][, cutoff]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
177 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
178 Return a list of the best "good enough" matches. *word* is a sequence for which |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
179 close matches are desired (typically a string), and *possibilities* is a list of |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
180 sequences against which to match *word* (typically a list of strings). |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
181 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
182 Optional argument *n* (default ``3``) is the maximum number of close matches to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
183 return; *n* must be greater than ``0``. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
184 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
185 Optional argument *cutoff* (default ``0.6``) is a float in the range [0, 1]. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
186 Possibilities that don't score at least that similar to *word* are ignored. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
187 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
188 The best (no more than *n*) matches among the possibilities are returned in a |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
189 list, sorted by similarity score, most similar first. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
190 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
191 >>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy']) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
192 ['apple', 'ape'] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
193 >>> import keyword |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
194 >>> get_close_matches('wheel', keyword.kwlist) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
195 ['while'] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
196 >>> get_close_matches('apple', keyword.kwlist) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
197 [] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
198 >>> get_close_matches('accept', keyword.kwlist) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
199 ['except'] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
200 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
201 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
202 .. function:: ndiff(a, b[, linejunk][, charjunk]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
203 |
|
43629
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
204 Compare *a* and *b* (lists of strings); return a :class:`Differ`\ -style |
|
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
205 delta (a :term:`generator` generating the delta lines). |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
206 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
207 Optional keyword parameters *linejunk* and *charjunk* are for filter functions |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
208 (or ``None``): |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
209 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
210 *linejunk*: A function that accepts a single string argument, and returns true |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
211 if the string is junk, or false if not. The default is (``None``), starting with |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
212 Python 2.3. Before then, the default was the module-level function |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
213 :func:`IS_LINE_JUNK`, which filters out lines without visible characters, except |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
214 for at most one pound character (``'#'``). As of Python 2.3, the underlying |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
215 :class:`SequenceMatcher` class does a dynamic analysis of which lines are so |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
216 frequent as to constitute noise, and this usually works better than the pre-2.3 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
217 default. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
218 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
219 *charjunk*: A function that accepts a character (a string of length 1), and |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
220 returns if the character is junk, or false if not. The default is module-level |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
221 function :func:`IS_CHARACTER_JUNK`, which filters out whitespace characters (a |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
222 blank or tab; note: bad idea to include newline in this!). |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
223 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
224 :file:`Tools/scripts/ndiff.py` is a command-line front-end to this function. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
225 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
226 >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
227 ... 'ore\ntree\nemu\n'.splitlines(1)) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
228 >>> print ''.join(diff), |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
229 - one |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
230 ? ^ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
231 + ore |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
232 ? ^ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
233 - two |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
234 - three |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
235 ? - |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
236 + tree |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
237 + emu |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
238 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
239 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
240 .. function:: restore(sequence, which) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
241 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
242 Return one of the two sequences that generated a delta. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
243 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
244 Given a *sequence* produced by :meth:`Differ.compare` or :func:`ndiff`, extract |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
245 lines originating from file 1 or 2 (parameter *which*), stripping off line |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
246 prefixes. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
247 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
248 Example: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
249 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
250 >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
251 ... 'ore\ntree\nemu\n'.splitlines(1)) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
252 >>> diff = list(diff) # materialize the generated delta into a list |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
253 >>> print ''.join(restore(diff, 1)), |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
254 one |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
255 two |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
256 three |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
257 >>> print ''.join(restore(diff, 2)), |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
258 ore |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
259 tree |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
260 emu |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
261 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
262 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
263 .. function:: unified_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
264 |
|
43629
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
265 Compare *a* and *b* (lists of strings); return a delta (a :term:`generator` |
|
4f662ba09f1f
Add :term: for generators.
Georg Brandl <georg@python.org>
parents:
43598
diff
changeset
|
266 generating the delta lines) in unified diff format. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
267 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
268 Unified diffs are a compact way of showing just the lines that have changed plus |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
269 a few lines of context. The changes are shown in a inline style (instead of |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
270 separate before/after blocks). The number of context lines is set by *n* which |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
271 defaults to three. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
272 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
273 By default, the diff control lines (those with ``---``, ``+++``, or ``@@``) are |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
274 created with a trailing newline. This is helpful so that inputs created from |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
275 :func:`file.readlines` result in diffs that are suitable for use with |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
276 :func:`file.writelines` since both the inputs and outputs have trailing |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
277 newlines. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
278 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
279 For inputs that do not have trailing newlines, set the *lineterm* argument to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
280 ``""`` so that the output will be uniformly newline free. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
281 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
282 The context diff format normally has a header for filenames and modification |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
283 times. Any or all of these may be specified using strings for *fromfile*, |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
284 *tofile*, *fromfiledate*, and *tofiledate*. The modification times are normally |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
285 expressed in the format returned by :func:`time.ctime`. If not specified, the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
286 strings default to blanks. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
287 |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
288 >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
289 >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
290 >>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'): |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
291 ... sys.stdout.write(line) # doctest: +NORMALIZE_WHITESPACE |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
292 --- before.py |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
293 +++ after.py |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
294 @@ -1,4 +1,4 @@ |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
295 -bacon |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
296 -eggs |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
297 -ham |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
298 +python |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
299 +eggy |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
300 +hamster |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
301 guido |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
302 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
303 See :ref:`difflib-interface` for a more detailed example. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
304 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
305 .. versionadded:: 2.3 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
306 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
307 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
308 .. function:: IS_LINE_JUNK(line) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
309 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
310 Return true for ignorable lines. The line *line* is ignorable if *line* is |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
311 blank or contains a single ``'#'``, otherwise it is not ignorable. Used as a |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
312 default for parameter *linejunk* in :func:`ndiff` before Python 2.3. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
313 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
314 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
315 .. function:: IS_CHARACTER_JUNK(ch) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
316 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
317 Return true for ignorable characters. The character *ch* is ignorable if *ch* |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
318 is a space or tab, otherwise it is not ignorable. Used as a default for |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
319 parameter *charjunk* in :func:`ndiff`. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
320 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
321 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
322 .. seealso:: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
323 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
324 `Pattern Matching: The Gestalt Approach <http://www.ddj.com/184407970?pgno=5>`_ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
325 Discussion of a similar algorithm by John W. Ratcliff and D. E. Metzener. This |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
326 was published in `Dr. Dobb's Journal <http://www.ddj.com/>`_ in July, 1988. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
327 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
328 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
329 .. _sequence-matcher: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
330 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
331 SequenceMatcher Objects |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
332 ----------------------- |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
333 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
334 The :class:`SequenceMatcher` class has this constructor: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
335 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
336 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
337 .. class:: SequenceMatcher([isjunk[, a[, b]]]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
338 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
339 Optional argument *isjunk* must be ``None`` (the default) or a one-argument |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
340 function that takes a sequence element and returns true if and only if the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
341 element is "junk" and should be ignored. Passing ``None`` for *isjunk* is |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
342 equivalent to passing ``lambda x: 0``; in other words, no elements are ignored. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
343 For example, pass:: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
344 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
345 lambda x: x in " \t" |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
346 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
347 if you're comparing lines as sequences of characters, and don't want to synch up |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
348 on blanks or hard tabs. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
349 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
350 The optional arguments *a* and *b* are sequences to be compared; both default to |
|
43753
4b3623568e6c
Make "hashable" a glossary entry and clarify docs on __cmp__, __eq__ and __hash__.
Georg Brandl <georg@python.org>
parents:
43629
diff
changeset
|
351 empty strings. The elements of both sequences must be :term:`hashable`. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
352 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
353 :class:`SequenceMatcher` objects have the following methods: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
354 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
355 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
356 .. method:: set_seqs(a, b) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
357 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
358 Set the two sequences to be compared. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
359 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
360 :class:`SequenceMatcher` computes and caches detailed information about the |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
361 second sequence, so if you want to compare one sequence against many |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
362 sequences, use :meth:`set_seq2` to set the commonly used sequence once and |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
363 call :meth:`set_seq1` repeatedly, once for each of the other sequences. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
364 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
365 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
366 .. method:: set_seq1(a) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
367 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
368 Set the first sequence to be compared. The second sequence to be compared |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
369 is not changed. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
370 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
371 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
372 .. method:: set_seq2(b) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
373 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
374 Set the second sequence to be compared. The first sequence to be compared |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
375 is not changed. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
376 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
377 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
378 .. method:: find_longest_match(alo, ahi, blo, bhi) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
379 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
380 Find longest matching block in ``a[alo:ahi]`` and ``b[blo:bhi]``. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
381 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
382 If *isjunk* was omitted or ``None``, :meth:`find_longest_match` returns |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
383 ``(i, j, k)`` such that ``a[i:i+k]`` is equal to ``b[j:j+k]``, where ``alo |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
384 <= i <= i+k <= ahi`` and ``blo <= j <= j+k <= bhi``. For all ``(i', j', |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
385 k')`` meeting those conditions, the additional conditions ``k >= k'``, ``i |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
386 <= i'``, and if ``i == i'``, ``j <= j'`` are also met. In other words, of |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
387 all maximal matching blocks, return one that starts earliest in *a*, and |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
388 of all those maximal matching blocks that start earliest in *a*, return |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
389 the one that starts earliest in *b*. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
390 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
391 >>> s = SequenceMatcher(None, " abcd", "abcd abcd") |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
392 >>> s.find_longest_match(0, 5, 0, 9) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
393 Match(a=0, b=4, size=5) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
394 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
395 If *isjunk* was provided, first the longest matching block is determined |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
396 as above, but with the additional restriction that no junk element appears |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
397 in the block. Then that block is extended as far as possible by matching |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
398 (only) junk elements on both sides. So the resulting block never matches |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
399 on junk except as identical junk happens to be adjacent to an interesting |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
400 match. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
401 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
402 Here's the same example as before, but considering blanks to be junk. That |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
403 prevents ``' abcd'`` from matching the ``' abcd'`` at the tail end of the |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
404 second sequence directly. Instead only the ``'abcd'`` can match, and |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
405 matches the leftmost ``'abcd'`` in the second sequence: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
406 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
407 >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd") |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
408 >>> s.find_longest_match(0, 5, 0, 9) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
409 Match(a=1, b=0, size=4) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
410 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
411 If no blocks match, this returns ``(alo, blo, 0)``. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
412 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
413 .. versionchanged:: 2.6 |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
414 This method returns a :term:`named tuple` ``Match(a, b, size)``. |
|
44638
62f6d780a11d
Documentation for r5990[3567].
Georg Brandl <georg@python.org>
parents:
44383
diff
changeset
|
415 |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
416 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
417 .. method:: get_matching_blocks() |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
418 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
419 Return list of triples describing matching subsequences. Each triple is of |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
420 the form ``(i, j, n)``, and means that ``a[i:i+n] == b[j:j+n]``. The |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
421 triples are monotonically increasing in *i* and *j*. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
422 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
423 The last triple is a dummy, and has the value ``(len(a), len(b), 0)``. It |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
424 is the only triple with ``n == 0``. If ``(i, j, n)`` and ``(i', j', n')`` |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
425 are adjacent triples in the list, and the second is not the last triple in |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
426 the list, then ``i+n != i'`` or ``j+n != j'``; in other words, adjacent |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
427 triples always describe non-adjacent equal blocks. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
428 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
429 .. XXX Explain why a dummy is used! |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
430 |
|
50522
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
46555
diff
changeset
|
431 .. versionchanged:: 2.5 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
432 The guarantee that adjacent triples always describe non-adjacent blocks |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
433 was implemented. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
434 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
435 .. doctest:: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
436 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
437 >>> s = SequenceMatcher(None, "abxcd", "abcd") |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
438 >>> s.get_matching_blocks() |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
439 [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)] |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
440 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
441 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
442 .. method:: get_opcodes() |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
443 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
444 Return list of 5-tuples describing how to turn *a* into *b*. Each tuple is |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
445 of the form ``(tag, i1, i2, j1, j2)``. The first tuple has ``i1 == j1 == |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
446 0``, and remaining tuples have *i1* equal to the *i2* from the preceding |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
447 tuple, and, likewise, *j1* equal to the previous *j2*. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
448 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
449 The *tag* values are strings, with these meanings: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
450 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
451 +---------------+---------------------------------------------+ |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
452 | Value | Meaning | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
453 +===============+=============================================+ |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
454 | ``'replace'`` | ``a[i1:i2]`` should be replaced by | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
455 | | ``b[j1:j2]``. | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
456 +---------------+---------------------------------------------+ |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
457 | ``'delete'`` | ``a[i1:i2]`` should be deleted. Note that | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
458 | | ``j1 == j2`` in this case. | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
459 +---------------+---------------------------------------------+ |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
460 | ``'insert'`` | ``b[j1:j2]`` should be inserted at | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
461 | | ``a[i1:i1]``. Note that ``i1 == i2`` in | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
462 | | this case. | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
463 +---------------+---------------------------------------------+ |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
464 | ``'equal'`` | ``a[i1:i2] == b[j1:j2]`` (the sub-sequences | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
465 | | are equal). | |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
466 +---------------+---------------------------------------------+ |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
467 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
468 For example: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
469 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
470 >>> a = "qabxcd" |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
471 >>> b = "abycdf" |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
472 >>> s = SequenceMatcher(None, a, b) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
473 >>> for tag, i1, i2, j1, j2 in s.get_opcodes(): |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
474 ... print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
475 ... (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2])) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
476 delete a[0:1] (q) b[0:0] () |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
477 equal a[1:3] (ab) b[0:2] (ab) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
478 replace a[3:4] (x) b[2:3] (y) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
479 equal a[4:6] (cd) b[3:5] (cd) |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
480 insert a[6:6] () b[5:6] (f) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
481 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
482 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
483 .. method:: get_grouped_opcodes([n]) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
484 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
485 Return a :term:`generator` of groups with up to *n* lines of context. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
486 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
487 Starting with the groups returned by :meth:`get_opcodes`, this method |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
488 splits out smaller change clusters and eliminates intervening ranges which |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
489 have no changes. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
490 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
491 The groups are returned in the same format as :meth:`get_opcodes`. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
492 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
493 .. versionadded:: 2.3 |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
494 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
495 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
496 .. method:: ratio() |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
497 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
498 Return a measure of the sequences' similarity as a float in the range [0, |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
499 1]. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
500 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
501 Where T is the total number of elements in both sequences, and M is the |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
502 number of matches, this is 2.0\*M / T. Note that this is ``1.0`` if the |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
503 sequences are identical, and ``0.0`` if they have nothing in common. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
504 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
505 This is expensive to compute if :meth:`get_matching_blocks` or |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
506 :meth:`get_opcodes` hasn't already been called, in which case you may want |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
507 to try :meth:`quick_ratio` or :meth:`real_quick_ratio` first to get an |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
508 upper bound. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
509 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
510 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
511 .. method:: quick_ratio() |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
512 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
513 Return an upper bound on :meth:`ratio` relatively quickly. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
514 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
515 This isn't defined beyond that it is an upper bound on :meth:`ratio`, and |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
516 is faster to compute. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
517 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
518 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
519 .. method:: real_quick_ratio() |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
520 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
521 Return an upper bound on :meth:`ratio` very quickly. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
522 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
523 This isn't defined beyond that it is an upper bound on :meth:`ratio`, and |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
524 is faster to compute than either :meth:`ratio` or :meth:`quick_ratio`. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
525 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
526 The three methods that return the ratio of matching to total characters can give |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
527 different results due to differing levels of approximation, although |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
528 :meth:`quick_ratio` and :meth:`real_quick_ratio` are always at least as large as |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
529 :meth:`ratio`: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
530 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
531 >>> s = SequenceMatcher(None, "abcd", "bcde") |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
532 >>> s.ratio() |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
533 0.75 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
534 >>> s.quick_ratio() |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
535 0.75 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
536 >>> s.real_quick_ratio() |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
537 1.0 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
538 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
539 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
540 .. _sequencematcher-examples: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
541 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
542 SequenceMatcher Examples |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
543 ------------------------ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
544 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
545 This example compares two strings, considering blanks to be "junk:" |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
546 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
547 >>> s = SequenceMatcher(lambda x: x == " ", |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
548 ... "private Thread currentThread;", |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
549 ... "private volatile Thread currentThread;") |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
550 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
551 :meth:`ratio` returns a float in [0, 1], measuring the similarity of the |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
552 sequences. As a rule of thumb, a :meth:`ratio` value over 0.6 means the |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
553 sequences are close matches: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
554 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
555 >>> print round(s.ratio(), 3) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
556 0.866 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
557 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
558 If you're only interested in where the sequences match, |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
559 :meth:`get_matching_blocks` is handy: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
560 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
561 >>> for block in s.get_matching_blocks(): |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
562 ... print "a[%d] and b[%d] match for %d elements" % block |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
563 a[0] and b[0] match for 8 elements |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
564 a[8] and b[17] match for 21 elements |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
565 a[29] and b[38] match for 0 elements |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
566 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
567 Note that the last tuple returned by :meth:`get_matching_blocks` is always a |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
568 dummy, ``(len(a), len(b), 0)``, and this is the only case in which the last |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
569 tuple element (number of elements matched) is ``0``. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
570 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
571 If you want to know how to change the first sequence into the second, use |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
572 :meth:`get_opcodes`: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
573 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
574 >>> for opcode in s.get_opcodes(): |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
575 ... print "%6s a[%d:%d] b[%d:%d]" % opcode |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
576 equal a[0:8] b[0:8] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
577 insert a[8:8] b[8:17] |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
578 equal a[8:29] b[17:38] |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
579 |
|
53552
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
580 .. seealso:: |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
581 |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
582 * The :func:`get_close_matches` function in this module which shows how |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
583 simple code building on :class:`SequenceMatcher` can be used to do useful |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
584 work. |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
585 |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
586 * `Simple version control recipe |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
587 <http://code.activestate.com/recipes/576729/>`_ for a small application |
|
2b3945d755a7
Add example to the seealso section.
Raymond Hettinger <python@rcn.com>
parents:
51745
diff
changeset
|
588 built with :class:`SequenceMatcher`. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
589 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
590 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
591 .. _differ-objects: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
592 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
593 Differ Objects |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
594 -------------- |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
595 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
596 Note that :class:`Differ`\ -generated deltas make no claim to be **minimal** |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
597 diffs. To the contrary, minimal diffs are often counter-intuitive, because they |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
598 synch up anywhere possible, sometimes accidental matches 100 pages apart. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
599 Restricting synch points to contiguous matches preserves some notion of |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
600 locality, at the occasional cost of producing a longer diff. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
601 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
602 The :class:`Differ` class has this constructor: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
603 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
604 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
605 .. class:: Differ([linejunk[, charjunk]]) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
606 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
607 Optional keyword parameters *linejunk* and *charjunk* are for filter functions |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
608 (or ``None``): |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
609 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
610 *linejunk*: A function that accepts a single string argument, and returns true |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
611 if the string is junk. The default is ``None``, meaning that no line is |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
612 considered junk. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
613 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
614 *charjunk*: A function that accepts a single character argument (a string of |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
615 length 1), and returns true if the character is junk. The default is ``None``, |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
616 meaning that no character is considered junk. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
617 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
618 :class:`Differ` objects are used (deltas generated) via a single method: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
619 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
620 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
621 .. method:: Differ.compare(a, b) |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
622 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
623 Compare two sequences of lines, and generate the delta (a sequence of lines). |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
624 |
|
46555
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
625 Each sequence must contain individual single-line strings ending with newlines. |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
626 Such sequences can be obtained from the :meth:`readlines` method of file-like |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
627 objects. The delta generated also consists of newline-terminated strings, ready |
|
66c8bd1bedf3
reformat some documentation of classes so methods and attributes are under the class directive
Benjamin Peterson <benjamin@python.org>
parents:
46014
diff
changeset
|
628 to be printed as-is via the :meth:`writelines` method of a file-like object. |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
629 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
630 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
631 .. _differ-examples: |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
632 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
633 Differ Example |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
634 -------------- |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
635 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
636 This example compares two texts. First we set up the texts, sequences of |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
637 individual single-line strings ending with newlines (such sequences can also be |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
638 obtained from the :meth:`readlines` method of file-like objects): |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
639 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
640 >>> text1 = ''' 1. Beautiful is better than ugly. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
641 ... 2. Explicit is better than implicit. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
642 ... 3. Simple is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
643 ... 4. Complex is better than complicated. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
644 ... '''.splitlines(1) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
645 >>> len(text1) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
646 4 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
647 >>> text1[0][-1] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
648 '\n' |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
649 >>> text2 = ''' 1. Beautiful is better than ugly. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
650 ... 3. Simple is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
651 ... 4. Complicated is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
652 ... 5. Flat is better than nested. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
653 ... '''.splitlines(1) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
654 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
655 Next we instantiate a Differ object: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
656 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
657 >>> d = Differ() |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
658 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
659 Note that when instantiating a :class:`Differ` object we may pass functions to |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
660 filter out line and character "junk." See the :meth:`Differ` constructor for |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
661 details. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
662 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
663 Finally, we compare the two: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
664 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
665 >>> result = list(d.compare(text1, text2)) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
666 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
667 ``result`` is a list of strings, so let's pretty-print it: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
668 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
669 >>> from pprint import pprint |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
670 >>> pprint(result) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
671 [' 1. Beautiful is better than ugly.\n', |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
672 '- 2. Explicit is better than implicit.\n', |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
673 '- 3. Simple is better than complex.\n', |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
674 '+ 3. Simple is better than complex.\n', |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
675 '? ++\n', |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
676 '- 4. Complex is better than complicated.\n', |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
677 '? ^ ---- ^\n', |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
678 '+ 4. Complicated is better than complex.\n', |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
679 '? ++++ ^ ^\n', |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
680 '+ 5. Flat is better than nested.\n'] |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
681 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
682 As a single multi-line string it looks like this: |
|
42604
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
683 |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
684 >>> import sys |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
685 >>> sys.stdout.writelines(result) |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
686 1. Beautiful is better than ugly. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
687 - 2. Explicit is better than implicit. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
688 - 3. Simple is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
689 + 3. Simple is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
690 ? ++ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
691 - 4. Complex is better than complicated. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
692 ? ^ ---- ^ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
693 + 4. Complicated is better than complex. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
694 ? ++++ ^ ^ |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
695 + 5. Flat is better than nested. |
|
9e1529bf0442
Move the 3k reST doc tree in place.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
696 |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
697 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
698 .. _difflib-interface: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
699 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
700 A command-line interface to difflib |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
701 ----------------------------------- |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
702 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
703 This example shows how to use difflib to create a ``diff``-like utility. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
704 It is also contained in the Python source distribution, as |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
705 :file:`Tools/scripts/diff.py`. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
706 |
|
46014
31cf38bdaac0
Enable doctest running for several other documents.
Georg Brandl <georg@python.org>
parents:
45454
diff
changeset
|
707 .. testcode:: |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
708 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
709 """ Command line interface to difflib.py providing diffs in four formats: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
710 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
711 * ndiff: lists every line and highlights interline changes. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
712 * context: highlights clusters of changes in a before/after format. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
713 * unified: highlights clusters of changes in an inline format. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
714 * html: generates side by side comparison with change highlights. |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
715 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
716 """ |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
717 |
|
51745
9815da43a1ce
revert r69777 since all the experts agree that extra import lines distract from the code
Benjamin Peterson <benjamin@python.org>
parents:
51742
diff
changeset
|
718 import sys, os, time, difflib, optparse |
|
45454
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
719 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
720 def main(): |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
721 # Configure the option parser |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
722 usage = "usage: %prog [options] fromfile tofile" |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
723 parser = optparse.OptionParser(usage) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
724 parser.add_option("-c", action="store_true", default=False, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
725 help='Produce a context format diff (default)') |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
726 parser.add_option("-u", action="store_true", default=False, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
727 help='Produce a unified format diff') |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
728 hlp = 'Produce HTML side by side diff (can use -c and -l in conjunction)' |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
729 parser.add_option("-m", action="store_true", default=False, help=hlp) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
730 parser.add_option("-n", action="store_true", default=False, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
731 help='Produce a ndiff format diff') |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
732 parser.add_option("-l", "--lines", type="int", default=3, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
733 help='Set number of context lines (default 3)') |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
734 (options, args) = parser.parse_args() |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
735 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
736 if len(args) == 0: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
737 parser.print_help() |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
738 sys.exit(1) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
739 if len(args) != 2: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
740 parser.error("need to specify both a fromfile and tofile") |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
741 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
742 n = options.lines |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
743 fromfile, tofile = args # as specified in the usage string |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
744 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
745 # we're passing these as arguments to the diff function |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
746 fromdate = time.ctime(os.stat(fromfile).st_mtime) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
747 todate = time.ctime(os.stat(tofile).st_mtime) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
748 fromlines = open(fromfile, 'U').readlines() |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
749 tolines = open(tofile, 'U').readlines() |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
750 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
751 if options.u: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
752 diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
753 fromdate, todate, n=n) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
754 elif options.n: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
755 diff = difflib.ndiff(fromlines, tolines) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
756 elif options.m: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
757 diff = difflib.HtmlDiff().make_file(fromlines, tolines, fromfile, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
758 tofile, context=options.c, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
759 numlines=n) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
760 else: |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
761 diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
762 fromdate, todate, n=n) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
763 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
764 # we're using writelines because diff is a generator |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
765 sys.stdout.writelines(diff) |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
766 |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
767 if __name__ == '__main__': |
|
d7e232e9f1a1
More difflib examples. Written for GHOP by Josip Dzolonga.
Georg Brandl <georg@python.org>
parents:
44638
diff
changeset
|
768 main() |
