如何防止字符串之间大小不同的空格?

时间:2018-08-16 16:20:35

标签: python string formatting

这可能是一个模糊的问题,所以我将尽力解释最好的方法。假设我有2个变量(长度不同)

variable_one = "John Doe"
variable_two = "Thomas Smith"

我该如何打印它们,以使输出在每个变量之间保持一致的间距而又不知道字符串的确切长度? 例如,如果我用中间的东西正常打印它们:

print(variable_one + " - Age: 40")
print(variable_two + " - Age: 2")

输出为:

John Doe - Age: 40
Thomas Smith - Age: 2

我将如何自动使输出与空格保持一致,使其看起来像这样:

John Doe      -      Age: 40
Thomas Smith  -      Age: 2

谢谢:) 〜皮特

3 个答案:

答案 0 :(得分:2)

尝试使用格式:

print('{0:12s} - Age {1:<d}'.format(var, age))

12在这种情况下是您希望名称占用多少空间(右侧填充空格以填充多余的空间)。

如果您使用的是python3.6或更高版本,则还可以使用格式化的字符串:

print(f'{var:12s} - Age {age:<d}')

以上内容应与使用格式相同,但我认为它更具可读性。

此外,有关格式化字符串和格式的文档:https://docs.python.org/2/library/string.html#format-specification-mini-language,如果此处没有答案完全符合您的要求,则应该可以调整格式。

答案 1 :(得分:1)

您可以尝试字符串格式

"{:10s} {:s}".format(variable1, " - Age 40")

其中10是您希望variable1占用的字符数。如果长度小于该长度,则用空格填充。第二个字符串也是如此。

但是,您的-连字符是第二个字符串的一部分,因此,除非您手动分割字符串,否则无法填充它。

答案 2 :(得分:0)

如果您知道所有需要预先打印的变量并将它们存储在vars中,并且将年龄存储在ages中,则可以使用以下字符串格式:

max_len = max(map(len, vars))
for name, age in zip(vars, ages)
     print("{0:{1}} - Age: {2}".format(name, max_len, age))

如果将它们存储为具有nameage字段的对象,则

max_len = max([len(var.name) for var in vars])
for var in vars
     print("{0.name:{1}} - Age: {0.age}".format(var, max_len))

如果您事先不了解所有变量,则可以使用硬编码的填充名称的宽度来做相同的事情:

print("{0:10} - Age: {1}".format(name, age))