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

Using .format() in Python to allign a mix of variables and characters

我正在尝试学习如何使用 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

您可以创建一个自定义函数并设置 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 文档以获取所有格式设置选项的列表。

尝试:

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            !