Python:固定长度的字符串多个变量左/右对齐

时间:2015-05-09 13:21:13

标签: python string format

我对Python很新,并尝试在LCD显示器上为输出格式化字符串。

我想输出格式化的火车离场表

  • 显示屏的长度固定为20个字符(20x4)
  • 我有3个可变长度的字符串变量(line,station,eta)
  • 其中2个应左对齐(线,站),而第三个应右对齐

示例:

8: station A       8
45: long station  10
1: great station  25

我玩过很多东西,但是我无法定义整个字符串的最大长度,只能定义一个变量:

print('{0}: {1} {2:<20}'.format(line, station, eta))

非常感谢任何提示和提示!

---基于@Rafael Cardoso答案的解决方案:

print(format_departure(line, station, eta))


def format_departure(line, station, eta):
    max_length = 20
    truncate_chars = '..'

    # add a leading space to the eta - just to be on the safe side
    eta = ' ' + eta

    output = '{0}: {1}'.format(line, station)  # aligns left

    # make sure that the first part is not too long, otherwise truncate
    if (len(output + eta)) > max_length:
        # shorten for truncate_chars + eta + space
        output = output[0:max_length - len(truncate_chars + eta)] + truncate_chars

    output = output + ' '*(max_length - len(output) - len(eta)) + eta  # aligns right

    return output

4 个答案:

答案 0 :(得分:1)

左侧部分及其长度使用临时字符串:

tmp = '{}: {}'.format(line, station)
print('{}{:{}}'.format(tmp, eta, 20-len(tmp)))

演示:

trains = ((8, 'station A', 8), (45, 'long station', 10), (1, 'great station', 25))
for line, station, eta in trains:
    tmp = '{}: {}'.format(line, station)
    print('{}{:{}}'.format(tmp, eta, 20-len(tmp)))

Prints:

8: station A       8
45: long station  10
1: great station  25

答案 1 :(得分:0)

您可以使用切片指定最大长度。例如。以下内容仅打印格式为字符串的前20个字符:

print('{0}: {1} {2:<20}'.format(line, station, eta)[:20])

答案 2 :(得分:0)

您还可以对给定字符串使用.rjust().ljust()方法来设置其对齐方式,

lst = [[8, "station A", 8], [45, "long station", 10], [1, "great station", 25]]
for i in lst:
    print str(i[0]).ljust(2)+":"+i[1]+str(i[2]).rjust(20 - (len(i[1])+3))

输出:

8 :station A       8
45:long station   10
1 :great station  25

答案 3 :(得分:0)

在我看来,您希望创建一个表格,因此我建议您像这样使用prettytable

from prettytable import PrettyTable

table = PrettyTable(['line', 'station', 'eta'])

table.add_row([8, 'station A', 10])
table.add_row([6, 'station B', 20])
table.add_row([5, 'station C', 15])

由于它不是内置于Python中,您需要自己从包索引here安装它。