提问人:Storm 提问时间:11/6/2023 更新时间:11/6/2023 访问量:50
如何在 python 中正确格式化控制台输出?
How would I format console output in python correctly?
问:
from colorama import Fore
import platform
import distro
import time
import os
# Functions
def get_uptime():
return os.popen('uptime -p').read()[:-1]
def get_os():
return platform.system() + " " + platform.release()
# Main Entry
def main():
linux_distro = distro.name()
os_string = f"OS: {get_os()}"
uptime_str = f"Uptime: {get_uptime()}"
if 'pop' in linux_distro.lower():
print(Fore.CYAN + f"""
←←←←←←←←←←← ╠═══════════════ ROGUE FETCH ═════════════════════════════╣
←←←←←←←←←←←←←←←←←←← ╠ {os_string} ╣
←←←←←← ←←←←←←←←←←←←← ╠ ╣
←←←←← ↖←←←←←←←←←←←← ╠ {uptime_str} ╣
←←←← ←← ←←←←←←←←←←←← ╠ ╣
↖←←←←← ←←← ←←←←←←←←←←←←←↖ ╠ ╣
←←←←←←← ←←← ←←← ↖←←←←←← ╠ ╣
←←←←←←←←← ←↖ ↖←←↖ ←←←←←←←← ╠═════════════════════════════════════════════════════════╣
←←←←←←←←←← ←←←← ↖←←←←←←←←
←←←←←←←←←←← ↖←←←←←← ↖←←←←←←←←←
←←←←←←←←←←←← ←←←←←← ←←←←←←←←←←←
←←←←←←←←←←←←← ←←←←←↖←←←←←←←←←←←←
←←←←←←←←←←←←← ↖←←←↖ ←←←←←←←←←←←
↖←←←←←←←←←←←←← ←←←← ←←←←←←←←←←↖
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
←←←← ←←←←
←←←←←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←
""")
我用符号制作了框架,但是在运行时,它看起来没有对齐并且看起来不对齐: 友情链接: https://media.discordapp.net/attachments/1164305090144915556/1170754515495030895/image.png?ex=655a311c&is=6547bc1c&hm=41877fdc735ae2b06a1c7588f7c7ba397c2dd69cf8229d2ef6df6348379263f9&=&width=1160&height=487
答:
0赞
Markus Hirsimäki
11/6/2023
#1
您已根据“{uptime_str}”长度(而不是所包含字符串的实际长度)对齐文本。源代码中的对齐方式与视觉输出不匹配。
使用,然后使用一些填充机制,例如:len(uptime_str)
"mystring".rjust(how_much_to_pad)
或
"mystring".ljust(how_much_to_pad)
或
" " * len(uptime_str)
同样的问题也适用于你的os_string
评论
0赞
Storm
11/6/2023
已经试过了,没有用
0赞
Markus Hirsimäki
11/6/2023
请详细说明
0赞
Storm
11/6/2023
我试过使用 ljust,但是即使在之后,对齐仍然一团糟
0赞
quamrana
11/6/2023
请用这两行的示例来更新您的问题,您希望如何查看它们。
0赞
Storm
11/6/2023
像其他的一样,正确对齐到侧面
0赞
LhasaDad
11/6/2023
#2
您可以在 f 字符串变量定义中设置字符串的格式。例如,所有这些打印的每侧都有一个条形图,它们之间有一个 25 个字符的字段。弄清楚你正在使用的 var 字符串需要多宽,并把它放得那么大,并根据需要添加剩余的空间。
print(f"|{variable:25}|") # default formating, string left justified, numeric right
print(f"|{variable:>25}|") # right justifed
print(f"|{variable:<25}|") # left justifed
print(f"|{variable:^25}|") # center justified
我重新编写了您的代码,以便它可以在本地工作,让您了解我的意思:
import platform
import os
# Functions
def get_os():
return platform.system() + " " + platform.release()
# Main Entry
def main():
os_string = f"OS: {get_os()}"
print( f"""
←←←←←←←←←←← ╠═══════════════ ROGUE FETCH ═════════════════════════════╣
←←←←←←←←←←←←←←←←←←← ╠ {os_string:<25} ╣
←←←←←← ←←←←←←←←←←←←← ╠ ╣
←←←←← ↖←←←←←←←←←←←← ╠ ╣
←←←← ←← ←←←←←←←←←←←← ╠ ╣
↖←←←←← ←←← ←←←←←←←←←←←←←↖ ╠ ╣
←←←←←←← ←←← ←←← ↖←←←←←← ╠ ╣
←←←←←←←←← ←↖ ↖←←↖ ←←←←←←←← ╠═════════════════════════════════════════════════════════╣
←←←←←←←←←← ←←←← ↖←←←←←←←←
←←←←←←←←←←← ↖←←←←←← ↖←←←←←←←←←
←←←←←←←←←←←← ←←←←←← ←←←←←←←←←←←
←←←←←←←←←←←←← ←←←←←↖←←←←←←←←←←←←
←←←←←←←←←←←←← ↖←←←↖ ←←←←←←←←←←←
↖←←←←←←←←←←←←← ←←←← ←←←←←←←←←←↖
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
←←←← ←←←←
←←←←←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←
""")
main()
我收到了以下内容作为输出:
←←←←←←←←←←← ╠═══════════════ ROGUE FETCH ═════════════════════════════╣
←←←←←←←←←←←←←←←←←←← ╠ OS: Windows 11 ╣
←←←←←← ←←←←←←←←←←←←← ╠ ╣
←←←←← ↖←←←←←←←←←←←← ╠ ╣
←←←← ←← ←←←←←←←←←←←← ╠ ╣
↖←←←←← ←←← ←←←←←←←←←←←←←↖ ╠ ╣
←←←←←←← ←←← ←←← ↖←←←←←← ╠ ╣
←←←←←←←←← ←↖ ↖←←↖ ←←←←←←←← ╠═════════════════════════════════════════════════════════╣
←←←←←←←←←← ←←←← ↖←←←←←←←←
←←←←←←←←←←← ↖←←←←←← ↖←←←←←←←←←
←←←←←←←←←←←← ←←←←←← ←←←←←←←←←←←
←←←←←←←←←←←←← ←←←←←↖←←←←←←←←←←←←
←←←←←←←←←←←←← ↖←←←↖ ←←←←←←←←←←←
↖←←←←←←←←←←←←← ←←←← ←←←←←←←←←←↖
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
←←←← ←←←←
←←←←←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←
评论
0赞
Storm
11/6/2023
问题是字符串并不总是相同的大小,例如,不同的系统会更短/更长,我需要自动对齐它们os_string
0赞
LhasaDad
11/6/2023
@storm我给你的东西会给你 25 个字符的空间来容纳它,如果你需要 50 个字符的空间,那么数字是 50。在您的情况下,使用变量的左对齐形式:{os_string:<25},在这种情况下,即使操作系统字符串为 10,它也将始终将其填充为 25 个字符。这应该可以让您正确完成输出格式化。uptime_str的类似处理
0赞
LhasaDad
11/6/2023
@Storm更进一步,如果你的框是 35 个字符宽,当你输入代码时,你的垂直条之间会有 10 个额外的空格来填充格式化的字符串,以保持条形与其他行对齐。
0赞
quamrana
11/6/2023
#3
您只需要指定最小和最大字段宽度即可。
我在这里选择了 50 个字符:
print(Fore.CYAN + f"""
←←←←←←←←←←← ╠═══════════════ ROGUE FETCH ═════════════════════════════╣
←←←←←←←←←←←←←←←←←←← ╠ { os_string:50.50} ╣
←←←←←← ←←←←←←←←←←←←← ╠ ╣
←←←←← ↖←←←←←←←←←←←← ╠ { uptime_str:50.50} ╣
←←←← ←← ←←←←←←←←←←←← ╠ ╣
↖←←←←← ←←← ←←←←←←←←←←←←←↖ ╠ ╣
←←←←←←← ←←← ←←← ↖←←←←←← ╠ ╣
←←←←←←←←← ←↖ ↖←←↖ ←←←←←←←← ╠═════════════════════════════════════════════════════════╣
←←←←←←←←←← ←←←← ↖←←←←←←←←
←←←←←←←←←←← ↖←←←←←← ↖←←←←←←←←←
←←←←←←←←←←←← ←←←←←← ←←←←←←←←←←←
←←←←←←←←←←←←← ←←←←←↖←←←←←←←←←←←←
←←←←←←←←←←←←← ↖←←←↖ ←←←←←←←←←←←
↖←←←←←←←←←←←←← ←←←← ←←←←←←←←←←↖
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
←←←← ←←←←
←←←←←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←←←←←←←←←
←←←←←←←←←←←
""")
评论