如何用n个字符填充字符串以使其在Python中具有一定的长度

问题描述 投票:2回答:2

由于我是格式化字符串的新手,所以我很难找到确切的措辞。

假设我有两个变量:

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 python-3.x formatting string-formatting
2个回答
3
投票

您可以在python中使用字符串对象的ljust()rjust()

customer = 'John Doe'
balance = 39.99

output = customer.ljust(15, '.') + str(balance).rjust(10, '.')

print(output)
#John Doe............39.99

根据需要的格式,可以通过更改宽度或添加空格字符来对其进行调整。


0
投票

[如果您不想像其他答案所建议的那样在点的两边都留有空格,则同样可以实现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)

但是,再优雅一点,真的不是。

© www.soinside.com 2019 - 2024. All rights reserved.