summaryrefslogtreecommitdiffstats
path: root/Doc/library/difflib.rst
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2008-02-23 16:23:06 (GMT)
committerChristian Heimes <christian@cheimes.de>2008-02-23 16:23:06 (GMT)
commit8640e749fd9f769f486268bebe340c9a35cca564 (patch)
treefd6168e9832696bf63426c7f50c8edd354df1a80 /Doc/library/difflib.rst
parentf697219e9cfe198c4fdfed31f0dbf26af5bdcae5 (diff)
downloadcpython-8640e749fd9f769f486268bebe340c9a35cca564.zip
cpython-8640e749fd9f769f486268bebe340c9a35cca564.tar.gz
cpython-8640e749fd9f769f486268bebe340c9a35cca564.tar.bz2
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60964,60966-60967,60971,60977,60979-60989 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r60980 | georg.brandl | 2008-02-23 16:02:28 +0100 (Sat, 23 Feb 2008) | 2 lines #1492: allow overriding BaseHTTPServer's content type for error messages. ........ r60982 | georg.brandl | 2008-02-23 16:06:25 +0100 (Sat, 23 Feb 2008) | 2 lines #2165: fix test_logging failure on some machines. ........ r60983 | facundo.batista | 2008-02-23 16:07:35 +0100 (Sat, 23 Feb 2008) | 6 lines Issue 1089358. Adds the siginterrupt() function, that is just a wrapper around the system call with the same name. Also added test cases, doc changes and NEWS entry. Thanks Jason and Ralf Schmitt. ........ r60984 | georg.brandl | 2008-02-23 16:11:18 +0100 (Sat, 23 Feb 2008) | 2 lines #2067: file.__exit__() now calls subclasses' close() method. ........ r60985 | georg.brandl | 2008-02-23 16:19:54 +0100 (Sat, 23 Feb 2008) | 2 lines More difflib examples. Written for GHOP by Josip Dzolonga. ........ r60987 | andrew.kuchling | 2008-02-23 16:41:51 +0100 (Sat, 23 Feb 2008) | 1 line #2072: correct documentation for .rpc_paths ........ r60988 | georg.brandl | 2008-02-23 16:43:48 +0100 (Sat, 23 Feb 2008) | 2 lines #2161: Fix opcode name. ........ r60989 | andrew.kuchling | 2008-02-23 16:49:35 +0100 (Sat, 23 Feb 2008) | 2 lines #1119331: ncurses will just call exit() if the terminal name isn't found. Call setupterm() first so that we get a Python exception instead of just existing. ........
Diffstat (limited to 'Doc/library/difflib.rst')
-rw-r--r--Doc/library/difflib.rst113
1 files changed, 111 insertions, 2 deletions
diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst
index 7e61aa9..66f64e5 100644
--- a/Doc/library/difflib.rst
+++ b/Doc/library/difflib.rst
@@ -144,7 +144,27 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module.
expressed in the format returned by :func:`time.ctime`. If not specified, the
strings default to blanks.
- :file:`Tools/scripts/diff.py` is a command-line front-end for this function.
+ ::
+
+ >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
+ >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
+ >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
+ ... sys.stdout.write(line)
+ *** before.py
+ --- after.py
+ ***************
+ *** 1,4 ****
+ ! bacon
+ ! eggs
+ ! ham
+ guido
+ --- 1,4 ----
+ ! python
+ ! eggy
+ ! hamster
+ guido
+
+ See :ref:`difflib-interface` for a more detailed example.
.. function:: get_close_matches(word, possibilities[, n][, cutoff])
@@ -259,7 +279,24 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module.
expressed in the format returned by :func:`time.ctime`. If not specified, the
strings default to blanks.
- :file:`Tools/scripts/diff.py` is a command-line front-end for this function.
+ ::
+
+ >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
+ >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
+ >>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
+ ... sys.stdout.write(line)
+ --- before.py
+ +++ after.py
+ @@ -1,4 +1,4 @@
+ -bacon
+ -eggs
+ -ham
+ +python
+ +eggy
+ +hamster
+ guido
+
+ See :ref:`difflib-interface` for a more detailed example.
.. function:: IS_LINE_JUNK(line)
@@ -635,3 +672,75 @@ As a single multi-line string it looks like this::
? ++++ ^ ^
+ 5. Flat is better than nested.
+
+.. _difflib-interface:
+
+A command-line interface to difflib
+-----------------------------------
+
+This example shows how to use difflib to create a ``diff``-like utility.
+It is also contained in the Python source distribution, as
+:file:`Tools/scripts/diff.py`.
+
+::
+
+ """ Command line interface to difflib.py providing diffs in four formats:
+
+ * ndiff: lists every line and highlights interline changes.
+ * context: highlights clusters of changes in a before/after format.
+ * unified: highlights clusters of changes in an inline format.
+ * html: generates side by side comparison with change highlights.
+
+ """
+
+ import sys, os, time, difflib, optparse
+
+ def main():
+ # Configure the option parser
+ usage = "usage: %prog [options] fromfile tofile"
+ parser = optparse.OptionParser(usage)
+ parser.add_option("-c", action="store_true", default=False,
+ help='Produce a context format diff (default)')
+ parser.add_option("-u", action="store_true", default=False,
+ help='Produce a unified format diff')
+ hlp = 'Produce HTML side by side diff (can use -c and -l in conjunction)'
+ parser.add_option("-m", action="store_true", default=False, help=hlp)
+ parser.add_option("-n", action="store_true", default=False,
+ help='Produce a ndiff format diff')
+ parser.add_option("-l", "--lines", type="int", default=3,
+ help='Set number of context lines (default 3)')
+ (options, args) = parser.parse_args()
+
+ if len(args) == 0:
+ parser.print_help()
+ sys.exit(1)
+ if len(args) != 2:
+ parser.error("need to specify both a fromfile and tofile")
+
+ n = options.lines
+ fromfile, tofile = args # as specified in the usage string
+
+ # we're passing these as arguments to the diff function
+ fromdate = time.ctime(os.stat(fromfile).st_mtime)
+ todate = time.ctime(os.stat(tofile).st_mtime)
+ fromlines = open(fromfile, 'U').readlines()
+ tolines = open(tofile, 'U').readlines()
+
+ if options.u:
+ diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile,
+ fromdate, todate, n=n)
+ elif options.n:
+ diff = difflib.ndiff(fromlines, tolines)
+ elif options.m:
+ diff = difflib.HtmlDiff().make_file(fromlines, tolines, fromfile,
+ tofile, context=options.c,
+ numlines=n)
+ else:
+ diff = difflib.context_diff(fromlines, tolines, fromfile, tofile,
+ fromdate, todate, n=n)
+
+ # we're using writelines because diff is a generator
+ sys.stdout.writelines(diff)
+
+ if __name__ == '__main__':
+ main()