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

标签 python string format

我是 Python 的新手,尝试格式化一个字符串以在 LCD 显示器上输出。

我想输出一个格式化的火车发车表

  • 显示的固定长度为 20 个字符 (20x4)
  • 我有 3 个可变长度的字符串变量(线路、车站、预计到达时间)
  • 其中 2 个应左对齐(线路、车站),而第三个应右对齐

例子:

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

我玩过各种各样的东西,但我无法定义整个字符串的最大长度,但只能定义 1 个变量:

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

最佳答案

您可以通过计算应该在 station 和 eta 之间添加多少空格来添加空格:

>>> line = ['8', '45', '1']
>>> station = ['station A', 'long station', 'great station']
>>> eta = ['8','10', '25']
>>> MAX = 20

>>> for i in range(3):
    m_str = '{0}: {1}'.format(line[i], station[i]) #aligns left
    m_str = m_str + ' '*(MAX-len(str)-len(eta[i])) + eta[i] #aligns right
    print m_str

计算将得到最大长度(在本例中为 20)减去 m_str 的当前 len 减去即将到来的长度 (len(eta[i])).

请记住,它假定此时 len(m_str) 不会大于 20。

输出:

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

关于Python:固定长度字符串多个变量左/右对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140435/

相关文章:

python - Matplotlib 饼图 'All Other Categories"

python - 卷积层特征图上的特殊函数

.net - 从 VB.Net 中的二进制文件中提取字符串

string - Lua模式查询

oracle - 如何格式化由 dbms_output.put_line PL/SQL 创建的表?

python - 如何验证pandas.read_csv读取的csv数据?

python - 琴弦的平衡选择

java - 错误:Constructor in class cannot be applied to given types

java - 如何格式化 Java 中 TreeMap 中的字符串列表以这种方式打印?

php - 当秒数不为零时,Date_format 返回 false