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

p3rjfoxz  于 2023-10-21  发布在  Python
关注(0)|答案(3)|浏览(89)

我有一个坚韧的时间找到确切的措辞为我的问题,因为我是新的格式字符串。
假设我有两个变量:

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)

.但我很好奇是否有一种更“优雅”的方式来做这件事,比如字符串格式。
这可能吗
谢谢你,谢谢

8oomwypt

8oomwypt1#

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

customer = 'John Doe'
balance = 39.99

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

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

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

m2xkgtsf

m2xkgtsf2#

如果你不想像另一个答案所建议的那样在点的两边都有空格,你也可以通过指定格式来实现:

"{:.<17s}{:.>8.2f}".format(customer, balance)

将做17个字符宽左对齐,.右填充字符串和8个字符的右对齐,.左填充,浮点精度为2个小数点。
你也可以用f-string(Python >=3.6)做同样的事情:

f"{customer:.<17s}{balance:.>8.2f}"

但是,如果您还想在点的两侧包含空格,则会变得更加棘手。您仍然可以这样做,但您需要在填充差距之前进行双填充/格式化或连接:

"{:.<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)

但再一次,更优雅的是它真的不是。

iklwldmw

iklwldmw3#

我很惊讶没有人提到f-strings;在Python版本>= 3.6中最优雅的方式

output = f'{customer:.<25} {balance:.2f}'

相关问题