在Python中使用.format()来混合变量和字符

时间:2016-11-04 18:51:07

标签: python python-3.x string-formatting string.format

我正在尝试学习如何使用Python的.format()来使我的控制台输出进行测试我的写作看起来更具可读性但是我并没有完全包装我的围绕着它。

我目前的尝试是这样的:

print('({:d}/{:d}) {} {} {} {}'.format(test, num_tests, *item))

它可以很好地打印出我想要它的内容,但是我想对齐这些不同的字段,以便无论有多少数字,它们总是排成一行。例如,我当前的输出看起来像这样:

(9/800) item1 item2 item3 item4
(10/800) item1 item2 item3 item4

有没有办法可以重写我的格式,以便它看起来像这样?

 (9/800) item1 item2 item3 item4
(10/800) item1 item2 item3 item4

2 个答案:

答案 0 :(得分:1)

尝试:

print('({:>3}/{}) {} {} {} {}'.format(test, num_tests, *item))

示例:

>>> print('({:>3}/{}) {} {} {} {}'.format(0, 800, 1, 2, 3, 4))
(  0/800) 1 2 3 4
>>> print('({:>3}/{}) {} {} {} {}'.format(10, 800, 1, 2, 3, 4))
( 10/800) 1 2 3 4
>>> print('({:>3}/{}) {} {} {} {}'.format(100, 800, 1, 2, 3, 4))
(100/800) 1 2 3 4

其他例子:

>>> print('({:>3}/{}) {:>12} {:>12} {:>12} {:>12}'.format(1, 800, 'Python', 'Hello', 'World', '!'))
(  1/800)       Python        Hello        World            !
>>> print('({:>3}/{}) {:>12} {:>12} {:>12} {:>12}'.format(100, 800, 'I', 'Love', 'Python', '!'))
(100/800)            I         Love       Python            !

或者

>>> print('({:03d}/{}) {:>12} {:>12} {:>12} {:>12}'.format(12, 800, 'I', 'Love', 'Python', '!'))
(012/800)            I         Love       Python            !

答案 1 :(得分:0)

您可以创建自定义函数并设置str.rjust()以设置要包装文本的长度。您的自定义功能可以是:

def my_print(test, num_tests, *item):
    width = 8 
    test = '({:d}/{:d})'.format(test, num_tests).rjust(width)
    items = ''.join(str(i).rjust(width) for i in item)
    print test + items

示例运行:

>>> my_print(9, 800, 'yes', 'no', 'hello')
 (9/800)     yes      no   hello

如果必须通过str.format()进行,您可以创建自定义函数以添加填充:

def my_print(test, num_tests, *item):
    test = '{0: >10}'.format('({:d}/{:d})'.format(test, num_tests))
    items = ''.join('{0: >6}'.format(i) for i in item)
    print test + items

示例运行:

>>> my_print(9, 800, 'yes', 'no', 'hello')
   (9/800)   yes    no hello

检查String Format Specification文档以获取所有格式选项的列表。