由于我是格式化字符串的新手,所以我很难找到确切的措辞。
假设我有两个变量:
customer = 'John Doe'
balance = 39.99
我想打印一行25个字符的行,并用特定字符(在此情况下为句点)填充两个值之间的空间:
'John Doe .......... 39.99'
因此,当我遍历客户时,我要打印一行始终为25个字符的行,其名称在左侧,余额在右侧,并允许句点进行调整以填充两者之间的空间。
我可以将其分解为多个步骤并完成结果...
customer = 'Barry Allen'
balance = 99
spaces = 23 - len(customer + str(balance))
'{} {} {}'.format(customer, '.' * spaces, balance)
# of course, this assumes that len(customer + str(balance)) is less than 23 (which is easy to work around)
...但是我很好奇是否有更“优雅”的方式,例如字符串格式。
这甚至可能吗?
谢谢!
您可以在python中使用字符串对象的ljust()
和rjust()
:
customer = 'John Doe'
balance = 39.99
output = customer.ljust(15, '.') + str(balance).rjust(10, '.')
print(output)
#John Doe............39.99
根据需要的格式,可以通过更改宽度或添加空格字符来对其进行调整。
[如果您不想像其他答案所建议的那样在点的两边都留有空格,则同样可以实现specifying formatting:
"{:.<17s}{:.>8.2f}".format(customer, balance)
[将左对齐宽17个字符,右填充字符串.
,右对齐8个字符,左填充.
,浮点精度为2个小数点。
您可以使用f字符串(Python> = 3.6)执行相同操作:
f"{customer:.<17s}{balance:.>8.2f}"
但是,如果您还想在点的两边都包含空格,则会变得比较棘手。您仍然可以执行此操作,但是您需要在填充间隙之前对pad / format进行双重填充或连接:
"{:.<16s}{:.>9s}".format(f"{customer} ", f" {balance:>.2f}")
但是要称呼它比较优雅,我会有些痛苦。
您还可以通过格式化来完成所有这些工作:
# Fill in with calculated number of "."
"{} {} {:.2f}".format(customer,
"."*(25 - (2 + len(customer) + len(f"{balance:.2f}"))),
balance)
# Similarly used for calculated width to pad with "."
"{} {:.^{}s} {:.2f}".format(customer,
"",
25 - (2 + len(customer) + len(f"{balance:.2f}")),
balance)
但是,再优雅一点,真的不是。