嵌套字符串格式化

10

我正在编写一些报告,想知道是否有更简单的方法来实现以下行为。

>>> '{:-^60}'.format('Percentage used: {:.2%}'.format(.4))
'------------------Percentage used: 40.00%-------------------'

你可以看到,我正在将文本居中,然后打印一个格式化为百分比的数字。但是我在一个格式函数内使用另一个格式函数。如果可能的话,我希望在单个函数中完成相同的操作,类似于以下方式。

'$SOMETHING GOES HERE'.format(header = 'Percentage Used:',percentage = .4)
当然,我正在寻找一个通用的解决方案,它可以适用于所有或大多数格式选项,而不仅仅是对齐。 谢谢。

2
似乎你的问题本质上是嵌套的。想象一下,你想要格式化一对两个数字,每个数字至少有3个字符,并且使整个数字对至少占用10个字符。我无法想象你会写出除了类似于 '{:10}'.format('({:3}, {:3})'.format(1,2)) 这样的代码之外的其他方式。这里也是同样的情况。你需要居中整个字符串,而不是任何特定的元素,因此你必须格式化已经格式化过的字符串。@wim 是正确的,center 可能更易读,但它们实际上是等效的。 - abarnert
谢谢,我主要是在寻找一些想法。我也不知道你怎么做到的,但也许其他函数或者类似@wim的东西可以解决问题。然而,我认为我想做的事情受到了格式化函数本身的限制。 - Darkade
如果你正在寻找比内置的format更强大和灵活(但更复杂)的东西,在format被讨论的几年里,人们提出了各种替代方案,并编写了实现它们大部分功能的库。尝试搜索PyPI,也许还有ActiveState的配方集合(因为这是在PyPI还在开发中时发生的),也许你会找到满足你需求的东西。(我没有具体的推荐。) - abarnert
哦,另外,对于Python 2.x,有一个纯Python参考实现的str.format;你可能可以很容易地将其移植到3.x,然后添加任何扩展。 - abarnert
谢谢。我不认为这个项目会用到它,但我会考虑在将来的项目中使用它。 - Darkade
1个回答

8
一种更易读的选项可能是使用 str.center
>>> 'Percentage used: {:.2%}'.format(.4).center(60, '-')
'------------------Percentage used: 40.00%-------------------'

2
谢谢,这解决了手头的问题。但是它并不十分通用。正如@abarnert所评论的那样,我想做的可能本质上是嵌套的。 - Darkade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接