如何在Python中右对齐文本

mhh*_*bib 3 python justify python-3.x

我有一个长度很多的虚拟文本。

Sample_text = """Nunc tempus metus sem, at posuere nulla volutpat viverra.Sed nec nisl imperdiet, egestas ex et, sodales libero.Suspendisse egestas id dui at aliquet.Nulla a justo neque.Pellentesque non urna iaculis, maximus dolor at, pellentesque eros. Duis mi velit, ornare eu mollis sed, congue eget nisl. Ut suscipit, elit eu mattis vehicula, justo quam vulputate urna, nec tempor augue ligula sed nisl. Phasellus vel augue eu nibh sodales pretium ornare vel felis.Vivamus vitae suscipit orci ."""

我正在寻找一种方法来证明文本的合理性,例如right对齐方式。浏览了文本换行文档,但只有默认值是合理的。

import textwrap
wrapper = textwrap.TextWrapper(width=50)
dedented_text = textwrap.dedent(text=sample_text)
print(wrapper.fill(text=dedented_text))
Run Code Online (Sandbox Code Playgroud)

文本换行还提供了许多功能,如缩短、缩进等。

找到另一种方式来证明文本的合理性。

str.ljust(s, width[, fillchar])
str.rjust(s, width[, fillchar])
str.center(s, width[, fillchar])
Run Code Online (Sandbox Code Playgroud)

但上述函数仅在文本 len 短于 width 时有效。

有没有像上面这样的功能或方法来证明文本合理?

Grz*_*ski 6

简单的方法是:

import re
wrapper = textwrap.TextWrapper(width=50)
dedented_text = textwrap.dedent(text=sample_text)

txt = wrapper.fill(text=dedented_text)
def justify(txt:str, width:int) -> str:
    prev_txt = txt
    while((l:=width-len(txt))>0):
        txt = re.sub(r"(\s+)", r"\1 ", txt, count=l)
        if(txt == prev_txt): break
    return txt.rjust(width)

for l in txt.splitlines():
    print(justify(l, 50))
Run Code Online (Sandbox Code Playgroud)

几点注意事项:

(1) 对齐涉及行,而不是字符串中的行 - 因此您应该逐行对齐文本。AFAIK 没有批量方法。

(2)你总是通过拉伸空间来证明合理性 - 这只是你的决定,你选择哪些空间以及如何拉伸它们 - 我发现网络上的所有示例仅在它们使用的拉伸空间的方法方面有所不同......

输出:

Nunc  tempus  metus sem, at posuere nulla volutpat
viverra.  Sed  nec  nisl imperdiet, egestas ex et,
sodales  libero.  Suspendisse  egestas  id  dui at
aliquet.  Nulla  a  justo  neque. Pellentesque non
urna iaculis, maximus dolor at, pellentesque eros.
Duis  mi  velit, ornare eu mollis sed, congue eget
nisl.  Ut suscipit, elit eu mattis vehicula, justo
quam  vulputate  urna, nec tempor augue ligula sed
nisl.  Phasellus vel augue eu nibh sodales pretium
ornare  vel  felis.Vivamus  vitae  suscipit  orci.
Run Code Online (Sandbox Code Playgroud)