打印并覆盖最后一条可变长度的行(在IPython中)

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

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

Now reading ./file.ext... ng-named/subdirectories/version/LongFileNameAsWell.ext

一种解决方法是在我所有的打印字符串后面加上空格,但是我需要确保我没有换行,同时仍然有足够的空格来覆盖整个文件名。所有这些都会增加很多开销,bug的余地等等。

有没有Python的方法可以做到这一点?

为了记录,我在Windows的Ipy控制台上的Spyder上使用Python 3.7

oo748899 回答:打印并覆盖最后一条可变长度的行(在IPython中)

Sayandip Dutta's answer的基础上,您还可以使用tsc中的get_terminal_size来获取当前行长设置,然后编写新行并在该行短于此的情况下添加空格。 / p>

shutil

编辑:我只是意识到这可能在很长的行中都无法使用...因此您将不得不使用类似的

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)
,

您可以尝试以下方法:

lst = ["Now reading file path/to/xxx/file.ext...","Now reading ./path/with/many/long-named/subdirectories/version/LongFileNameAsWell.ext...","Now reading ./file.ext..."]
maxlen = 0

for l in lst:
    maxlen = max(maxlen,len(l))
    print('\r',end = l.ljust(maxlen,' '))

当然,它是您的目录,而不是lst,而不是l,而是文件名。

本文链接:https://www.f2er.com/3008472.html

大家都在问