python - 在 Python 中对齐两侧的文本

标签 python formatting text-alignment justify

我知道函数 print() 可以 align text to right or to left ,但是我可以两边对齐吗?

示例: 这段文字:

Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure  
dolor in reprehenderit.

应该是这样的:

Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed  do  eiusmod tempor incididunt ut labore 
et dolore magna  aliqua. Ut enim  ad minim veniam, 
quis nostrud  exercitation ullamco laboris nisi ut 
aliquip ex ea  commodo consequat. Duis  aute irure  
dolor in reprehenderit.

最佳答案

据我所知,没有办法做到这一点。但是您可以尝试自己解决它:

一种可能的(看起来不太好看)算法:

  • 将文本分割成行
  • 找到最长的线
  • 对于所有其他线路:
    • 找到第一个空格,然后添加另一个空格
    • 如果仍然不够长,则移至下一个尚未拉长的空间

这可能看起来像这样:

def justify_text(text):
    # split text into lines and find longest
    lines = [line.strip() for line in text.split("\n")]
    ll = len(max(lines, key=len))

    # iterate lines
    for i, l in enumerate(lines):
        # remember last elongates space
        pos_space = 0
        # do for all lines but the last one
        while len(l) < ll and (i != len(lines)-1):
            # print(l) # uncomment to see stages of refining
            pos_space = l.find(" ", pos_space)
            if pos_space == -1:
                # start over from beginning
                pos_space = l.find(" ", 0)
                if pos_space == -1:
                    # no space inside the line, can't do anything about it
                    # we break to avoid endless loop
                    break
            # splice in a space and increase next search position
            l = l[:pos_space] + " " + l[pos_space:]
            pos_space += 2
        # store changed line
        lines[i] = l

    return '\n'.join(lines)

t = """Lorem ipsum dolor sit amet, consectetur adipiscing more text
elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure  
dolor in reprehenderit."""

print(justify_text(t))

并产生:

Lorem ipsum dolor sit amet, consectetur adipiscing more text
elit,    sed    do   eiusmod  tempor  incididunt  ut  labore
et    dolore    magna  aliqua.  Ut  enim  ad  minim  veniam,
quis    nostrud    exercitation   ullamco  laboris  nisi  ut
aliquip    ex    ea   commodo  consequat.  Duis  aute  irure
dolor in reprehenderit.

为了更接近文本的外观,您必须通过从该行的两侧交替搜索来找到拉长的空间。


如果您不从已经分行的文本开始,您可以执行预先步骤(尽管在这种情况下使用 linked algo from codereview 更有效):

t = """Lorem ipsum dolor sit amet, consectetur adipiscing more text elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit."""

def prep_text(text, no_longer_then=50):
    words = text.split(" ")
    result = [[]]
    for w in words:
        if sum(len(part) for part in result[-1]) + len(w) > no_longer_then:
            result.append([w])
        else:
            result[-1].append(w)
    print(result)
    return '\n'.join(' '.join(inner) for inner in result)

prepped = prep_text(t)    
print(prepped)

输出:

#        1         2         3         4         5
# 345678901234567890123456789012345678901234567890
Lorem ipsum dolor sit amet, consectetur adipiscing
more text elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit.

关于python - 在 Python 中对齐两侧的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64925614/

相关文章:

excel - 将文本 "YYYY-MM"格式化为日期,以便您可以排序

html - 使用 HTML 标记在 Jasper 中进行文本对齐

python - OpenCv 均值返回 4 元素元组

python - 删除零行二维 numpy 数组

Python 交互式循环中断

python - 如何在 PasteDeploy ini 文件中包含第三方记录器格式化程序?

C# 条件格式化Excel

iphone - UIPickerView - 当组件较多时右侧黑条

css - 垂直文本对齐在移动设备上不起作用

html - 对齐 Div 文本底部