Search code examples
pythonpython-3.xremoving-whitespace

Python 'textwrap' module not replacing all whitespace when using 'wrap' and 'fill' functions


I'm trying to output some text to the console using the Python textwrap module. According to the documentation both the wrap and fill functions will replace whitespace by default because the replace_witespace kwarg defaults to True.

However, in practice some whitespace remains and I am unable to format the text as required.

How can I format the text below without the chunk of whitespace after the first sentence?

Some title
----------

Lorem ipsum dolor sit amet, consectetur adipiscing elit.         Duis sem eros, imperdiet vitae mi
cursus, dapibus fringilla eros. Duis quis euismod ex. Maecenas ac consequat quam. Sed ac augue
dignissim, facilisis sapien vitae, vehicula mi. Maecenas elementum ex eu tortor dignissim
scelerisque. Curabitur et lobortis ex.

Here is the code that I am using.

from textwrap import fill, wrap

lines = [
    'Some title',
    '----------',
    '',
    ' '.join(wrap('''Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Duis sem eros, imperdiet vitae mi cursus, dapibus fringilla eros. Duis
        quis euismod ex. Maecenas ac consequat quam. Sed ac augue dignissim,
        facilisis sapien vitae, vehicula mi. Maecenas elementum ex eu tortor
        dignissim scelerisque. Curabitur et lobortis ex.'''))
]
out = []
for l in lines:
    out.append(fill(l, width=100))
print('\n'.join(out))

Solution

  • So looks like this can be done using dedent and defining separate strings for multiline strings.

    from textwrap import dedent, fill
    
    lines = [
        'Some title',
        '----------',
        '',
        dedent('Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' \
            'Duis sem eros, imperdiet vitae mi cursus, dapibus fringilla eros. Duis ' \
            'quis euismod ex. Maecenas ac consequat quam. Sed ac augue dignissim, ' \
            'facilisis sapien vitae, vehicula mi. Maecenas elementum ex eu tortor ' \
            'dignissim scelerisque. Curabitur et lobortis ex.')
    ]
    out = []
    for l in lines:
        out.append(fill(l, width=100))
    print('\n'.join(out))