我有一个由几个段落组成的文本,这些段落被双重换行符分隔。我想将它们格式化为70的线宽,保持新的线条和整个事物应该从一条带有Abstract: Lorem ipsum ...
的非缩进线开始。
所以整件事应该是这样的:
Abstract: Magna risus nonummy mollis mattis neque commodo mattis fusce
hendrerit nibh. Lorem massa lorem mauris ad orci quam risus
viverra aliquet senectus sociis. Donec proin nam dolor neque
placerat imperdiet eros ullamcorper egestas cum torquent
habitasse. Risus donec odio nostra ac et pede inceptos
praesent montes. Neque morbi sit morbi vestibulum
suspendisse mauris. Lacus massa mollis.
Donec class integer pede ac sed elit. Fames augue magnis
sapien natoque nisi. Proin augue mus nisl interdum convallis
pellentesque conubia.
Class dolor tempor netus suspendisse odio orci
vestibulum mus. Netus purus. Lacus metus tempor purus
adipiscing faucibus eget maecenas. Velit lacus integer
rhoncus primis nunc quis lorem lacus dictumst hendrerit.
我正在尝试使用textwrap
,但这不会产生所需的输出。这是代码:
from loremipsum import get_paragraphs
import textwrap
text = '\n\n'.join(get_paragraphs(3))
item = 'Abstract: '
print textwrap.fill(item+text,initial_indent='',subsequent_indent=' '*len(item),replace_whitespace=False)
这适用于第一段,但以下段落得到一些奇怪的缩进和这样的短行
Class vitae
nonummy imperdiet cras blandit fusce. Massa porta metus
semper tempor non id viverra eget. Purus morbi lorem semper
eget. Proin magna tortor metus magnis. Vitae ipsum. Velit
class aliquet tortor dolor parturient ullamcorper libero ac.
即使我使用initial_indent=' '*len(item)
,也会发生这种情况。这是一个错误吗?我怎样才能得到我想要的东西?
答案 0 :(得分:3)
来自文档:
注意:如果
replace_whitespace
为false,则换行符可能出现在行的中间并导致奇怪的输出。因此,文本应分为段落(使用str.splitlines()
或类似),这些段落将单独包装。
所以你应该这样做:
paragraphs = get_paragraphs(3)
item = 'Abstract: '
paragraphs[0] = item + paragraphs[0]
for idx, paragraph in enumerate(paragraphs):
rest_indent = " "*len(item)
start_indent = "" if idx == 0 else rest_indent
print textwrap.fill(paragraph,initial_indent=start_indent,subsequent_indent=rest_indent,replace_whitespace=False)
print ""
或者,使用列表理解:
paragraphs = get_paragraphs(3)
item = 'Abstract: '
text = "\n\n".join(textwrap.fill(p,initial_indent=' '*len(item),subsequent_indent=' '*len(item)) for p in paragraphs)
print item + text.lstrip()