|  | :mod:`textwrap` --- Text wrapping and filling | 
|  | ============================================= | 
|  |  | 
|  | .. module:: textwrap | 
|  | :synopsis: Text wrapping and filling | 
|  |  | 
|  | .. moduleauthor:: Greg Ward <gward@python.net> | 
|  | .. sectionauthor:: Greg Ward <gward@python.net> | 
|  |  | 
|  | **Source code:** :source:`Lib/textwrap.py` | 
|  |  | 
|  | -------------- | 
|  |  | 
|  | The :mod:`textwrap` module provides some convenience functions, | 
|  | as well as :class:`TextWrapper`, the class that does all the work. | 
|  | If you're just wrapping or filling one or two text strings, the convenience | 
|  | functions should be good enough; otherwise, you should use an instance of | 
|  | :class:`TextWrapper` for efficiency. | 
|  |  | 
|  | .. function:: wrap(text, width=70, *, initial_indent="", \ | 
|  | subsequent_indent="", expand_tabs=True, \ | 
|  | replace_whitespace=True, fix_sentence_endings=False, \ | 
|  | break_long_words=True, drop_whitespace=True, \ | 
|  | break_on_hyphens=True, tabsize=8, max_lines=None, \ | 
|  | placeholder=' [...]') | 
|  |  | 
|  | Wraps the single paragraph in *text* (a string) so every line is at most | 
|  | *width* characters long.  Returns a list of output lines, without final | 
|  | newlines. | 
|  |  | 
|  | Optional keyword arguments correspond to the instance attributes of | 
|  | :class:`TextWrapper`, documented below. | 
|  |  | 
|  | See the :meth:`TextWrapper.wrap` method for additional details on how | 
|  | :func:`wrap` behaves. | 
|  |  | 
|  |  | 
|  | .. function:: fill(text, width=70, *, initial_indent="", \ | 
|  | subsequent_indent="", expand_tabs=True, \ | 
|  | replace_whitespace=True, fix_sentence_endings=False, \ | 
|  | break_long_words=True, drop_whitespace=True, \ | 
|  | break_on_hyphens=True, tabsize=8, \ | 
|  | max_lines=None, placeholder=' [...]') | 
|  |  | 
|  | Wraps the single paragraph in *text*, and returns a single string containing the | 
|  | wrapped paragraph.  :func:`fill` is shorthand for  :: | 
|  |  | 
|  | "\n".join(wrap(text, ...)) | 
|  |  | 
|  | In particular, :func:`fill` accepts exactly the same keyword arguments as | 
|  | :func:`wrap`. | 
|  |  | 
|  |  | 
|  | .. function:: shorten(text, width, *, fix_sentence_endings=False, \ | 
|  | break_long_words=True, break_on_hyphens=True, \ | 
|  | placeholder=' [...]') | 
|  |  | 
|  | Collapse and truncate the given *text* to fit in the given *width*. | 
|  |  | 
|  | First the whitespace in *text* is collapsed (all whitespace is replaced by | 
|  | single spaces).  If the result fits in the *width*, it is returned. | 
|  | Otherwise, enough words are dropped from the end so that the remaining words | 
|  | plus the *placeholder* fit within *width*:: | 
|  |  | 
|  | >>> textwrap.shorten("Hello  world!", width=12) | 
|  | 'Hello world!' | 
|  | >>> textwrap.shorten("Hello  world!", width=11) | 
|  | 'Hello [...]' | 
|  | >>> textwrap.shorten("Hello world", width=10, placeholder="...") | 
|  | 'Hello...' | 
|  |  | 
|  | Optional keyword arguments correspond to the instance attributes of | 
|  | :class:`TextWrapper`, documented below.  Note that the whitespace is | 
|  | collapsed before the text is passed to the :class:`TextWrapper` :meth:`fill` | 
|  | function, so changing the value of :attr:`.tabsize`, :attr:`.expand_tabs`, | 
|  | :attr:`.drop_whitespace`, and :attr:`.replace_whitespace` will have no effect. | 
|  |  | 
|  | .. versionadded:: 3.4 | 
|  |  | 
|  | .. function:: dedent(text) | 
|  |  | 
|  | Remove any common leading whitespace from every line in *text*. | 
|  |  | 
|  | This can be used to make triple-quoted strings line up with the left edge of the | 
|  | display, while still presenting them in the source code in indented form. | 
|  |  | 
|  | Note that tabs and spaces are both treated as whitespace, but they are not | 
|  | equal: the lines ``"  hello"`` and ``"\thello"`` are considered to have no | 
|  | common leading whitespace. | 
|  |  | 
|  | Lines containing only whitespace are ignored in the input and normalized to a | 
|  | single newline character in the output. | 
|  |  | 
|  | For example:: | 
|  |  | 
|  | def test(): | 
|  | # end first line with \ to avoid the empty line! | 
|  | s = '''\ | 
|  | hello | 
|  | world | 
|  | ''' | 
|  | print(repr(s))          # prints '    hello\n      world\n    ' | 
|  | print(repr(dedent(s)))  # prints 'hello\n  world\n' | 
|  |  | 
|  |  | 
|  | .. function:: indent(text, prefix, predicate=None) | 
|  |  | 
|  | Add *prefix* to the beginning of selected lines in *text*. | 
|  |  | 
|  | Lines are separated by calling ``text.splitlines(True)``. | 
|  |  | 
|  | By default, *prefix* is added to all lines that do not consist | 
|  | solely of whitespace (including any line endings). | 
|  |  | 
|  | For example:: | 
|  |  | 
|  | >>> s = 'hello\n\n \nworld' | 
|  | >>> indent(s, '  ') | 
|  | '  hello\n\n \n  world' | 
|  |  | 
|  | The optional *predicate* argument can be used to control which lines | 
|  | are indented. For example, it is easy to add *prefix* to even empty | 
|  | and whitespace-only lines:: | 
|  |  | 
|  | >>> print(indent(s, '+ ', lambda line: True)) | 
|  | + hello | 
|  | + | 
|  | + | 
|  | + world | 
|  |  | 
|  | .. versionadded:: 3.3 | 
|  |  | 
|  |  | 
|  | :func:`wrap`, :func:`fill` and :func:`shorten` work by creating a | 
|  | :class:`TextWrapper` instance and calling a single method on it.  That | 
|  | instance is not reused, so for applications that process many text | 
|  | strings using :func:`wrap` and/or :func:`fill`, it may be more efficient to | 
|  | create your own :class:`TextWrapper` object. | 
|  |  | 
|  | Text is preferably wrapped on whitespaces and right after the hyphens in | 
|  | hyphenated words; only then will long words be broken if necessary, unless | 
|  | :attr:`TextWrapper.break_long_words` is set to false. | 
|  |  | 
|  | .. class:: TextWrapper(**kwargs) | 
|  |  | 
|  | The :class:`TextWrapper` constructor accepts a number of optional keyword | 
|  | arguments.  Each keyword argument corresponds to an instance attribute, so | 
|  | for example :: | 
|  |  | 
|  | wrapper = TextWrapper(initial_indent="* ") | 
|  |  | 
|  | is the same as  :: | 
|  |  | 
|  | wrapper = TextWrapper() | 
|  | wrapper.initial_indent = "* " | 
|  |  | 
|  | You can re-use the same :class:`TextWrapper` object many times, and you can | 
|  | change any of its options through direct assignment to instance attributes | 
|  | between uses. | 
|  |  | 
|  | The :class:`TextWrapper` instance attributes (and keyword arguments to the | 
|  | constructor) are as follows: | 
|  |  | 
|  |  | 
|  | .. attribute:: width | 
|  |  | 
|  | (default: ``70``) The maximum length of wrapped lines.  As long as there | 
|  | are no individual words in the input text longer than :attr:`width`, | 
|  | :class:`TextWrapper` guarantees that no output line will be longer than | 
|  | :attr:`width` characters. | 
|  |  | 
|  |  | 
|  | .. attribute:: expand_tabs | 
|  |  | 
|  | (default: ``True``) If true, then all tab characters in *text* will be | 
|  | expanded to spaces using the :meth:`~str.expandtabs` method of *text*. | 
|  |  | 
|  |  | 
|  | .. attribute:: tabsize | 
|  |  | 
|  | (default: ``8``) If :attr:`expand_tabs` is true, then all tab characters | 
|  | in *text* will be expanded to zero or more spaces, depending on the | 
|  | current column and the given tab size. | 
|  |  | 
|  | .. versionadded:: 3.3 | 
|  |  | 
|  |  | 
|  | .. attribute:: replace_whitespace | 
|  |  | 
|  | (default: ``True``) If true, after tab expansion but before wrapping, | 
|  | the :meth:`wrap` method will replace each whitespace character | 
|  | with a single space.  The whitespace characters replaced are | 
|  | as follows: tab, newline, vertical tab, formfeed, and carriage | 
|  | return (``'\t\n\v\f\r'``). | 
|  |  | 
|  | .. note:: | 
|  |  | 
|  | If :attr:`expand_tabs` is false and :attr:`replace_whitespace` is true, | 
|  | each tab character will be replaced by a single space, which is *not* | 
|  | the same as tab expansion. | 
|  |  | 
|  | .. note:: | 
|  |  | 
|  | If :attr:`replace_whitespace` is false, newlines may appear in the | 
|  | middle of a line and cause strange output. For this reason, text should | 
|  | be split into paragraphs (using :meth:`str.splitlines` or similar) | 
|  | which are wrapped separately. | 
|  |  | 
|  |  | 
|  | .. attribute:: drop_whitespace | 
|  |  | 
|  | (default: ``True``) If true, whitespace at the beginning and ending of | 
|  | every line (after wrapping but before indenting) is dropped. | 
|  | Whitespace at the beginning of the paragraph, however, is not dropped | 
|  | if non-whitespace follows it.  If whitespace being dropped takes up an | 
|  | entire line, the whole line is dropped. | 
|  |  | 
|  |  | 
|  | .. attribute:: initial_indent | 
|  |  | 
|  | (default: ``''``) String that will be prepended to the first line of | 
|  | wrapped output.  Counts towards the length of the first line.  The empty | 
|  | string is not indented. | 
|  |  | 
|  |  | 
|  | .. attribute:: subsequent_indent | 
|  |  | 
|  | (default: ``''``) String that will be prepended to all lines of wrapped | 
|  | output except the first.  Counts towards the length of each line except | 
|  | the first. | 
|  |  | 
|  |  | 
|  | .. attribute:: fix_sentence_endings | 
|  |  | 
|  | (default: ``False``) If true, :class:`TextWrapper` attempts to detect | 
|  | sentence endings and ensure that sentences are always separated by exactly | 
|  | two spaces.  This is generally desired for text in a monospaced font. | 
|  | However, the sentence detection algorithm is imperfect: it assumes that a | 
|  | sentence ending consists of a lowercase letter followed by one of ``'.'``, | 
|  | ``'!'``, or ``'?'``, possibly followed by one of ``'"'`` or ``"'"``, | 
|  | followed by a space.  One problem with this algorithm is that it is | 
|  | unable to detect the difference between "Dr." in :: | 
|  |  | 
|  | [...] Dr. Frankenstein's monster [...] | 
|  |  | 
|  | and "Spot." in :: | 
|  |  | 
|  | [...] See Spot. See Spot run [...] | 
|  |  | 
|  | :attr:`fix_sentence_endings` is false by default. | 
|  |  | 
|  | Since the sentence detection algorithm relies on ``string.lowercase`` for | 
|  | the definition of "lowercase letter", and a convention of using two spaces | 
|  | after a period to separate sentences on the same line, it is specific to | 
|  | English-language texts. | 
|  |  | 
|  |  | 
|  | .. attribute:: break_long_words | 
|  |  | 
|  | (default: ``True``) If true, then words longer than :attr:`width` will be | 
|  | broken in order to ensure that no lines are longer than :attr:`width`.  If | 
|  | it is false, long words will not be broken, and some lines may be longer | 
|  | than :attr:`width`.  (Long words will be put on a line by themselves, in | 
|  | order to minimize the amount by which :attr:`width` is exceeded.) | 
|  |  | 
|  |  | 
|  | .. attribute:: break_on_hyphens | 
|  |  | 
|  | (default: ``True``) If true, wrapping will occur preferably on whitespaces | 
|  | and right after hyphens in compound words, as it is customary in English. | 
|  | If false, only whitespaces will be considered as potentially good places | 
|  | for line breaks, but you need to set :attr:`break_long_words` to false if | 
|  | you want truly insecable words.  Default behaviour in previous versions | 
|  | was to always allow breaking hyphenated words. | 
|  |  | 
|  |  | 
|  | .. attribute:: max_lines | 
|  |  | 
|  | (default: ``None``) If not ``None``, then the output will contain at most | 
|  | *max_lines* lines, with *placeholder* appearing at the end of the output. | 
|  |  | 
|  | .. versionadded:: 3.4 | 
|  |  | 
|  |  | 
|  | .. index:: single: ...; placeholder | 
|  |  | 
|  | .. attribute:: placeholder | 
|  |  | 
|  | (default: ``' [...]'``) String that will appear at the end of the output | 
|  | text if it has been truncated. | 
|  |  | 
|  | .. versionadded:: 3.4 | 
|  |  | 
|  |  | 
|  | :class:`TextWrapper` also provides some public methods, analogous to the | 
|  | module-level convenience functions: | 
|  |  | 
|  | .. method:: wrap(text) | 
|  |  | 
|  | Wraps the single paragraph in *text* (a string) so every line is at most | 
|  | :attr:`width` characters long.  All wrapping options are taken from | 
|  | instance attributes of the :class:`TextWrapper` instance.  Returns a list | 
|  | of output lines, without final newlines.  If the wrapped output has no | 
|  | content, the returned list is empty. | 
|  |  | 
|  |  | 
|  | .. method:: fill(text) | 
|  |  | 
|  | Wraps the single paragraph in *text*, and returns a single string | 
|  | containing the wrapped paragraph. |