blob: 438007d0028d86eb28cfddb91ae2dd6c14a1503d [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`textwrap` --- Text wrapping and filling
2=============================================
3
4.. module:: textwrap
5 :synopsis: Text wrapping and filling
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Greg Ward <gward@python.net>
8.. sectionauthor:: Greg Ward <gward@python.net>
9
Raymond Hettinger10480942011-01-10 03:26:08 +000010**Source code:** :source:`Lib/textwrap.py`
Georg Brandl116aa622007-08-15 14:28:22 +000011
Raymond Hettinger4f707fd2011-01-10 19:54:11 +000012--------------
13
Antoine Pitrou389dec82013-08-12 22:39:09 +020014The :mod:`textwrap` module provides some convenience functions,
15as well as :class:`TextWrapper`, the class that does all the work.
16If you're just wrapping or filling one or two text strings, the convenience
17functions should be good enough; otherwise, you should use an instance of
18:class:`TextWrapper` for efficiency.
Georg Brandl116aa622007-08-15 14:28:22 +000019
Georg Brandl7f01a132009-09-16 15:58:14 +000020.. function:: wrap(text, width=70, **kwargs)
Georg Brandl116aa622007-08-15 14:28:22 +000021
Georg Brandl7f01a132009-09-16 15:58:14 +000022 Wraps the single paragraph in *text* (a string) so every line is at most
23 *width* characters long. Returns a list of output lines, without final
24 newlines.
Georg Brandl116aa622007-08-15 14:28:22 +000025
26 Optional keyword arguments correspond to the instance attributes of
27 :class:`TextWrapper`, documented below. *width* defaults to ``70``.
28
R David Murray1585b702012-09-08 13:13:25 -040029 See the :meth:`TextWrapper.wrap` method for additional details on how
30 :func:`wrap` behaves.
31
Georg Brandl116aa622007-08-15 14:28:22 +000032
Georg Brandl7f01a132009-09-16 15:58:14 +000033.. function:: fill(text, width=70, **kwargs)
Georg Brandl116aa622007-08-15 14:28:22 +000034
35 Wraps the single paragraph in *text*, and returns a single string containing the
36 wrapped paragraph. :func:`fill` is shorthand for ::
37
38 "\n".join(wrap(text, ...))
39
40 In particular, :func:`fill` accepts exactly the same keyword arguments as
41 :func:`wrap`.
42
Georg Brandl116aa622007-08-15 14:28:22 +000043
Larry Hastings3732ed22014-03-15 21:13:56 -070044.. function:: shorten(text, width, **kwargs)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000045
Larry Hastings3732ed22014-03-15 21:13:56 -070046 Collapse and truncate the given *text* to fit in the given *width*.
Antoine Pitrou389dec82013-08-12 22:39:09 +020047
Larry Hastings3732ed22014-03-15 21:13:56 -070048 First the whitespace in *text* is collapsed (all whitespace is replaced by
49 single spaces). If the result fits in the *width*, it is returned.
50 Otherwise, enough words are dropped from the end so that the remaining words
51 plus the :attr:`placeholder` fit within :attr:`width`::
Antoine Pitrou389dec82013-08-12 22:39:09 +020052
53 >>> textwrap.shorten("Hello world!", width=12)
54 'Hello world!'
55 >>> textwrap.shorten("Hello world!", width=11)
Antoine Pitrouc5930562013-08-16 22:31:12 +020056 'Hello [...]'
Antoine Pitrou389dec82013-08-12 22:39:09 +020057 >>> textwrap.shorten("Hello world", width=10, placeholder="...")
58 'Hello...'
59
Larry Hastings3732ed22014-03-15 21:13:56 -070060 Optional keyword arguments correspond to the instance attributes of
61 :class:`TextWrapper`, documented below. Note that the whitespace is
62 collapsed before the text is passed to the :class:`TextWrapper` :meth:`fill`
63 function, so changing the value of :attr:`.tabsize`, :attr:`.expand_tabs`,
64 :attr:`.drop_whitespace`, and :attr:`.replace_whitespace` will have no effect.
65
Antoine Pitrou389dec82013-08-12 22:39:09 +020066 .. versionadded:: 3.4
67
Georg Brandl116aa622007-08-15 14:28:22 +000068
69.. function:: dedent(text)
70
71 Remove any common leading whitespace from every line in *text*.
72
73 This can be used to make triple-quoted strings line up with the left edge of the
74 display, while still presenting them in the source code in indented form.
75
76 Note that tabs and spaces are both treated as whitespace, but they are not
77 equal: the lines ``" hello"`` and ``"\thello"`` are considered to have no
Georg Brandle6bcc912008-05-12 18:05:20 +000078 common leading whitespace.
Georg Brandl116aa622007-08-15 14:28:22 +000079
80 For example::
81
82 def test():
83 # end first line with \ to avoid the empty line!
84 s = '''\
85 hello
86 world
87 '''
Collin Winterc79461b2007-09-01 23:34:30 +000088 print(repr(s)) # prints ' hello\n world\n '
89 print(repr(dedent(s))) # prints 'hello\n world\n'
Georg Brandl116aa622007-08-15 14:28:22 +000090
91
Nick Coghlan4fae8cd2012-06-11 23:07:51 +100092.. function:: indent(text, prefix, predicate=None)
93
94 Add *prefix* to the beginning of selected lines in *text*.
95
96 Lines are separated by calling ``text.splitlines(True)``.
97
98 By default, *prefix* is added to all lines that do not consist
99 solely of whitespace (including any line endings).
100
101 For example::
102
103 >>> s = 'hello\n\n \nworld'
104 >>> indent(s, ' ')
105 ' hello\n\n \n world'
106
107 The optional *predicate* argument can be used to control which lines
108 are indented. For example, it is easy to add *prefix* to even empty
109 and whitespace-only lines::
110
111 >>> print(indent(s, '+ ', lambda line: True))
112 + hello
113 +
114 +
115 + world
116
Raymond Hettingerdc69e032014-11-05 21:27:56 -0800117 .. versionadded:: 3.3
118
Nick Coghlan4fae8cd2012-06-11 23:07:51 +1000119
Antoine Pitrou389dec82013-08-12 22:39:09 +0200120:func:`wrap`, :func:`fill` and :func:`shorten` work by creating a
121:class:`TextWrapper` instance and calling a single method on it. That
122instance is not reused, so for applications that process many text
Larry Hastings3732ed22014-03-15 21:13:56 -0700123strings using :func:`wrap` and/or :func:`fill`, it may be more efficient to
124create your own :class:`TextWrapper` object.
Antoine Pitrou389dec82013-08-12 22:39:09 +0200125
126Text is preferably wrapped on whitespaces and right after the hyphens in
127hyphenated words; only then will long words be broken if necessary, unless
128:attr:`TextWrapper.break_long_words` is set to false.
129
Georg Brandl7f01a132009-09-16 15:58:14 +0000130.. class:: TextWrapper(**kwargs)
Georg Brandl116aa622007-08-15 14:28:22 +0000131
132 The :class:`TextWrapper` constructor accepts a number of optional keyword
Georg Brandl7f01a132009-09-16 15:58:14 +0000133 arguments. Each keyword argument corresponds to an instance attribute, so
134 for example ::
Georg Brandl116aa622007-08-15 14:28:22 +0000135
136 wrapper = TextWrapper(initial_indent="* ")
137
138 is the same as ::
139
140 wrapper = TextWrapper()
141 wrapper.initial_indent = "* "
142
143 You can re-use the same :class:`TextWrapper` object many times, and you can
144 change any of its options through direct assignment to instance attributes
145 between uses.
146
Benjamin Petersone41251e2008-04-25 01:59:09 +0000147 The :class:`TextWrapper` instance attributes (and keyword arguments to the
148 constructor) are as follows:
Georg Brandl116aa622007-08-15 14:28:22 +0000149
150
Benjamin Petersone41251e2008-04-25 01:59:09 +0000151 .. attribute:: width
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Benjamin Petersone41251e2008-04-25 01:59:09 +0000153 (default: ``70``) The maximum length of wrapped lines. As long as there
154 are no individual words in the input text longer than :attr:`width`,
155 :class:`TextWrapper` guarantees that no output line will be longer than
156 :attr:`width` characters.
Georg Brandl116aa622007-08-15 14:28:22 +0000157
158
Benjamin Petersone41251e2008-04-25 01:59:09 +0000159 .. attribute:: expand_tabs
Georg Brandl116aa622007-08-15 14:28:22 +0000160
Benjamin Petersone41251e2008-04-25 01:59:09 +0000161 (default: ``True``) If true, then all tab characters in *text* will be
162 expanded to spaces using the :meth:`expandtabs` method of *text*.
Georg Brandl116aa622007-08-15 14:28:22 +0000163
164
Hynek Schlawackd5272592012-05-19 13:33:11 +0200165 .. attribute:: tabsize
166
167 (default: ``8``) If :attr:`expand_tabs` is true, then all tab characters
168 in *text* will be expanded to zero or more spaces, depending on the
169 current column and the given tab size.
170
171 .. versionadded:: 3.3
172
173
Benjamin Petersone41251e2008-04-25 01:59:09 +0000174 .. attribute:: replace_whitespace
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Andrew Svetlov59db4012012-08-13 23:22:23 +0300176 (default: ``True``) If true, after tab expansion but before wrapping,
177 the :meth:`wrap` method will replace each whitespace character
178 with a single space. The whitespace characters replaced are
179 as follows: tab, newline, vertical tab, formfeed, and carriage
180 return (``'\t\n\v\f\r'``).
Georg Brandl116aa622007-08-15 14:28:22 +0000181
Benjamin Petersone41251e2008-04-25 01:59:09 +0000182 .. note::
Georg Brandl116aa622007-08-15 14:28:22 +0000183
Benjamin Petersone41251e2008-04-25 01:59:09 +0000184 If :attr:`expand_tabs` is false and :attr:`replace_whitespace` is true,
185 each tab character will be replaced by a single space, which is *not*
186 the same as tab expansion.
Georg Brandl116aa622007-08-15 14:28:22 +0000187
Terry Reedy6d2ab712010-11-23 20:17:24 +0000188 .. note::
189
190 If :attr:`replace_whitespace` is false, newlines may appear in the
191 middle of a line and cause strange output. For this reason, text should
192 be split into paragraphs (using :meth:`str.splitlines` or similar)
193 which are wrapped separately.
194
Georg Brandl116aa622007-08-15 14:28:22 +0000195
Benjamin Petersone41251e2008-04-25 01:59:09 +0000196 .. attribute:: drop_whitespace
Georg Brandl116aa622007-08-15 14:28:22 +0000197
R David Murray1585b702012-09-08 13:13:25 -0400198 (default: ``True``) If true, whitespace at the beginning and ending of
199 every line (after wrapping but before indenting) is dropped.
200 Whitespace at the beginning of the paragraph, however, is not dropped
201 if non-whitespace follows it. If whitespace being dropped takes up an
202 entire line, the whole line is dropped.
Georg Brandl116aa622007-08-15 14:28:22 +0000203
Georg Brandl116aa622007-08-15 14:28:22 +0000204
Benjamin Petersone41251e2008-04-25 01:59:09 +0000205 .. attribute:: initial_indent
Georg Brandl116aa622007-08-15 14:28:22 +0000206
Benjamin Petersone41251e2008-04-25 01:59:09 +0000207 (default: ``''``) String that will be prepended to the first line of
R David Murray1585b702012-09-08 13:13:25 -0400208 wrapped output. Counts towards the length of the first line. The empty
209 string is not indented.
Georg Brandl116aa622007-08-15 14:28:22 +0000210
211
Benjamin Petersone41251e2008-04-25 01:59:09 +0000212 .. attribute:: subsequent_indent
Georg Brandl116aa622007-08-15 14:28:22 +0000213
Benjamin Petersone41251e2008-04-25 01:59:09 +0000214 (default: ``''``) String that will be prepended to all lines of wrapped
215 output except the first. Counts towards the length of each line except
216 the first.
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218
Benjamin Petersone41251e2008-04-25 01:59:09 +0000219 .. attribute:: fix_sentence_endings
Georg Brandl116aa622007-08-15 14:28:22 +0000220
Benjamin Petersone41251e2008-04-25 01:59:09 +0000221 (default: ``False``) If true, :class:`TextWrapper` attempts to detect
222 sentence endings and ensure that sentences are always separated by exactly
223 two spaces. This is generally desired for text in a monospaced font.
224 However, the sentence detection algorithm is imperfect: it assumes that a
225 sentence ending consists of a lowercase letter followed by one of ``'.'``,
226 ``'!'``, or ``'?'``, possibly followed by one of ``'"'`` or ``"'"``,
227 followed by a space. One problem with this is algorithm is that it is
228 unable to detect the difference between "Dr." in ::
Georg Brandl116aa622007-08-15 14:28:22 +0000229
Benjamin Petersone41251e2008-04-25 01:59:09 +0000230 [...] Dr. Frankenstein's monster [...]
Georg Brandl116aa622007-08-15 14:28:22 +0000231
Benjamin Petersone41251e2008-04-25 01:59:09 +0000232 and "Spot." in ::
Georg Brandl116aa622007-08-15 14:28:22 +0000233
Benjamin Petersone41251e2008-04-25 01:59:09 +0000234 [...] See Spot. See Spot run [...]
Georg Brandl116aa622007-08-15 14:28:22 +0000235
Benjamin Petersone41251e2008-04-25 01:59:09 +0000236 :attr:`fix_sentence_endings` is false by default.
Georg Brandl116aa622007-08-15 14:28:22 +0000237
Benjamin Petersone41251e2008-04-25 01:59:09 +0000238 Since the sentence detection algorithm relies on ``string.lowercase`` for
239 the definition of "lowercase letter," and a convention of using two spaces
240 after a period to separate sentences on the same line, it is specific to
241 English-language texts.
Georg Brandl116aa622007-08-15 14:28:22 +0000242
243
Benjamin Petersone41251e2008-04-25 01:59:09 +0000244 .. attribute:: break_long_words
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Benjamin Petersone41251e2008-04-25 01:59:09 +0000246 (default: ``True``) If true, then words longer than :attr:`width` will be
247 broken in order to ensure that no lines are longer than :attr:`width`. If
248 it is false, long words will not be broken, and some lines may be longer
249 than :attr:`width`. (Long words will be put on a line by themselves, in
250 order to minimize the amount by which :attr:`width` is exceeded.)
Georg Brandl116aa622007-08-15 14:28:22 +0000251
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000252
253 .. attribute:: break_on_hyphens
254
255 (default: ``True``) If true, wrapping will occur preferably on whitespaces
256 and right after hyphens in compound words, as it is customary in English.
257 If false, only whitespaces will be considered as potentially good places
258 for line breaks, but you need to set :attr:`break_long_words` to false if
259 you want truly insecable words. Default behaviour in previous versions
260 was to always allow breaking hyphenated words.
261
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000262
Serhiy Storchakaacc9f3f2013-10-15 21:22:54 +0300263 .. attribute:: max_lines
264
Larry Hastings3732ed22014-03-15 21:13:56 -0700265 (default: ``None``) If not ``None``, then the output will contain at most
266 *max_lines* lines, with *placeholder* appearing at the end of the output.
Serhiy Storchakaacc9f3f2013-10-15 21:22:54 +0300267
268 .. versionadded:: 3.4
269
270
271 .. attribute:: placeholder
272
Larry Hastings3732ed22014-03-15 21:13:56 -0700273 (default: ``' [...]'``) String that will appear at the end of the output
274 text if it has been truncated.
Serhiy Storchakaacc9f3f2013-10-15 21:22:54 +0300275
276 .. versionadded:: 3.4
277
278
Antoine Pitrou389dec82013-08-12 22:39:09 +0200279 :class:`TextWrapper` also provides some public methods, analogous to the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000280 module-level convenience functions:
Georg Brandl116aa622007-08-15 14:28:22 +0000281
Benjamin Petersone41251e2008-04-25 01:59:09 +0000282 .. method:: wrap(text)
Georg Brandl116aa622007-08-15 14:28:22 +0000283
Benjamin Petersone41251e2008-04-25 01:59:09 +0000284 Wraps the single paragraph in *text* (a string) so every line is at most
285 :attr:`width` characters long. All wrapping options are taken from
R David Murray1585b702012-09-08 13:13:25 -0400286 instance attributes of the :class:`TextWrapper` instance. Returns a list
287 of output lines, without final newlines. If the wrapped output has no
288 content, the returned list is empty.
Georg Brandl116aa622007-08-15 14:28:22 +0000289
290
Benjamin Petersone41251e2008-04-25 01:59:09 +0000291 .. method:: fill(text)
Georg Brandl116aa622007-08-15 14:28:22 +0000292
Benjamin Petersone41251e2008-04-25 01:59:09 +0000293 Wraps the single paragraph in *text*, and returns a single string
294 containing the wrapped paragraph.