如何在 python 中证明文本右对齐
How to justify text right alignment in python
我有一个有很多长度的虚拟文本。
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
对齐等文本。浏览了 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])
但是上面的函数只在文本长度小于宽度时有效
是否有类似上述的功能或方法来证明文本?
简单的方法是:
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" ", txt, count=l)
if(txt == prev_txt): break
return txt.rjust(width)
for l in txt.splitlines():
print(justify(l, 50))
几点注意事项:
(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.
我有一个有很多长度的虚拟文本。
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
对齐等文本。浏览了 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])
但是上面的函数只在文本长度小于宽度时有效
是否有类似上述的功能或方法来证明文本?
简单的方法是:
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" ", txt, count=l)
if(txt == prev_txt): break
return txt.rjust(width)
for l in txt.splitlines():
print(justify(l, 50))
几点注意事项:
(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.