Python-从屏幕左侧的给定位置打印

时间:2019-02-25 05:51:33

标签: python

以下代码:

i1, i2, i3 = 1234, 45, 856
print(f"{i1:<5}{i2:<5}{i3}")

显示:

1234 45   856

这很好,但是我想在屏幕左侧的给定位置显示每个整数。

如果可能的话,我也想继续使用f字符串,而不是C样式格式。

这将使我能够轻松地打印出对齐得很好的东西,例如:

 (1234)   (45)    (856)
 (12)     (45744) (844456)

当然可以在f字符串中添加这样的括号,但这有点噩梦。 在打印位置的行上提供硬编码位置会容易得多

顺便说一句,使用整数只是一个例子,我希望该解决方案适用于任何类型(浮点型,布尔型,数组...)。

3 个答案:

答案 0 :(得分:1)

您可能需要设计自己的格式化工具。假设i3的字段始于start。准备前两个字段的字符串,根据需要修剪或扩展它,然后将字符串追加到第三项:

s12 = f"{i1:<5}{i2:<5}"
start = 8

(s12[:start] if start <= len(s) else s + " " * (start - len(s))) + f"{i3}"
#'1234 45 856'
start=12
(s12[:start] if start <= len(s) else s + " " * (start - len(s))) + f"{i3}"
#'1234 45     856'

答案 1 :(得分:1)

不确定为什么需要此功能,但可以尝试以下操作:

>>> i1, i2, i3 = 1234, 45, 856
>>> print(f"{i1:<5}{i2:<5} {i3}") # your example
1234 45    856 
>>> print(f"{i1:<5}{i2:<5} \r{i3}") # start from the begging and overwrite
8564 45
>>> print(f"{i3:>50}\r {i1:<5}{i2:<5}")
1234 45                                       856

第三种情况下,i3向右移动了50个字符,然后才打印i1i2。但是请注意,以正确的方式打印所有内容会变得有些棘手。

如果要将输出格式设置为列,请查看此Create nice column output in python或某种终端计数器/进度条Text Progress Bar in the Console [closed]

答案 2 :(得分:0)

我最终找到了一种解决方法,其中包括使用封装的f字符串:

i1, i2, i3 = 1234, 45, 856
print(f'{f"({i1})":<10}{f"({i2})":<10}{f"({i3})":<10}')
i1, i2, i3 = 12, 454, 8564
print(f'{f"({i1})":<10}{f"({i2})":<10}{f"({i3})":<10}')

输出:

(1234)    (45)      (856)     
(12)      (454)     (8564)