gpt4 book ai didi

python - 打印并覆盖最后一个可变长度行(在 IPython 中)

转载 作者:行者123 更新时间:2023-12-01 06:49:12 27 4
gpt4 key购买 nike

如何覆盖最后打印的行的问题之前已被问过并得到回答(例如 here ),但似乎所有答案都假设您用类似长度的内容覆盖最后一行,例如在进度指示器中,其中“2% 完成”覆盖“1% 完成”。

但是,我想打印可变长度语句,例如“Now read file path/to/xxx/file.ext...”,其中下一个文件名可能更短。如果我使用简单的方法,首先打印 "Now Reading ./path/with/many/long-named/subdirectories/version/LongFileNameAsWell.ext...",然后打印 "现在读取 ./file.ext...",结果是一行内容

现在正在读取./file.ext...ng-named/subdirectories/version/LongFileNameAsWell.ext

一种解决方法是在所有打印字符串后附加空格,但随后我需要确保不会换行,同时仍然有足够的空格来覆盖整个文件名。这一切都增加了大量的开销、错误的空间等等。

有Pythonic的方法可以做到这一点吗?

郑重声明,我在 Windows 上使用 Spyder 上的 Python 3.7 和 IPython 控制台

最佳答案

构建于 Sayandip Dutta's answer ,您还可以使用 shutil 中的 get_terminal_size 来获取当前行长度设置,然后写入新行并在短于该值的情况下追加空格。

import time
from shutil import get_terminal_size

l = ["1st statment is long",
"2nd short",
"3rd statement is much longer...",
"done."]

sz = get_terminal_size().columns
for i in l:
print('\r', end=i.ljust(sz, ' '))
time.sleep(1)

编辑:我刚刚意识到这可能不适用于很长的行......所以你必须使用类似的东西

lines = ["1st statment is long",
"2nd short",
"3rd statement is much longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer longer...",
"more lines",
"done."]

widths = [0] + [len(l) for l in lines][:-1]
for l, w in zip(lines, widths):
print('\r', end=l.ljust(w, ' '))
time.sleep(1)

关于python - 打印并覆盖最后一个可变长度行(在 IPython 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59102595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com