如何在python中对齐文本右对齐

时间:2021-02-07 10:26:55

标签: python python-3.x justify

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

<块引用>

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

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

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

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

找到了另一种对齐文本的方法。

str.ljust(s, width[, fillchar])
str.rjust(s, width[, fillchar])
str.center(s, width[, fillchar])

但上述函数仅在文本长度小于宽度时有效。

有没有像上面那样的功能或对齐文本的方法?

1 个答案:

答案 0 :(得分:1)

简单的方法是:

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))

注意事项:

(1) justify 关注的是行,而不是字符串中的行 - 所以你应该逐行对齐文本。 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.