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