python print覆盖输出

这里是引用

https://m.baidu.com/ala/c/s/mip.oomake.com/question/1342293
引用:
https://m.baidu.com/ala/c/s/mip.oomake.com/question/1342293
如何在python中覆盖以前的打印到stdout?
如果我有以下代码:


```python
for x in range(10):     
print x

我会得到的输出
1
2
etc..
我想要做的不是打印新行,而是要替换先前的值,并用同一行上的新值覆盖它。

```python

```python
import sys
import time
for i in range(10):
    sys.stdout.write("\r" + i)    
    sys.stdout.flush()    
    time.sleep(1)
    nsequi 2018-11-04我无法让这个页面上的任何解决方案适用于IPython,但是@ Mike-Desimone的解决方案稍有不同就完成了这项工作:不是使用回车符终止该行,而是使用回车符开始行:
  

```python
  for x in range(10):    
    print '\r{0}'.format(x),
此外,此方法不需要第二个打印语句。iid 2018-11-04由于我最终通过Google访问,但我使用的是Python 3,以下是Python 3的工作方式:
for x in range(10):    
print("Progress {:2.1%}".format(x / 10), end="\r")相关答案:How can I suppress the newline after a print statement?hquia 2018-11-04在访问此主题之前我有同样的问题。对我来说,
sys.stdout.write仅在我正确刷新缓冲区时工作,即for x in range(10):    
sys.stdout.write('\r'+str(x))    
sys.stdout.flush()

如果不刷新,结果仅在脚本结束时打印oautem 2018-11-04答案可能大部分时间都有效。但…

for x in ['abc', 1]:    
print '{}\r'.format(x),-> 1bc
这是因为'\r'仅返回到行的开头但不清除输出。编辑:更好的解决方案(比我下面的旧提议) 如果POSIX支持对您来说足够了,以下将清除当前行并将光标留在其开头:
 print '\x1b[2K\r',
它使用ANSI转义码来清除终端线。更多信息可以在in wikipedia和this great talk找到。旧答案 我找到的(不太好)的解决方案看起来像这样:
  last_x = ''for x in ['abc', 1]:
        print ' ' * len(str(last_x)) + '\r',    
        print '{}\r'.format(x),    last_x = x-> 1
        一个优点是它也适用于Windows。quo_et 2018-11-04取消换行并打印\r。print 1,print '\r2'或者写信给
        stdout:sys.stdout.write('1')
        sys.stdout.write('\r2')
        mut 2018-11-04我使用以下方法创建了一个加载器:
        for i in range(10):    
        print(i*'.', end='\r')
        nomnis 2018-11-04一种方法是使用回车符('\r')字符返回到行的开头而不前进到下一行:for x in range(10):    print '{0}\r'.format(x),printprint语句末尾的逗号告诉它不要转到下一行。最后一个打印语句前进到下一行,因此您的提示不会覆盖最终输出。qquasi 2018-11-04一个更清洁,更“即插即用”的版本@ Nagasaki45的回答:
        def print_statusline(msg: str):
            last_msg_length = len(print_statusline.last_msg) 
        if hasattr(print_statusline, 'last_msg') 
        else 0    
        print(' ' * last_msg_length, end='\r')    
        print(msg, end='\r')    
        sys.stdout.flush()  
        # Some say they needed this, I didn't.   
         print_statusline.last_msg = msg
         # Then simply use like this:for msg in ["Initializing...", "Initialization successful!"]:   
          print_statusline(msg)    
          time.sleep(1)
          # If you want to check that the line gets cleared properly:
          for i in range(9, 0, -1):    
          print_statusline("{}".format(i) * i)   
           time.sleep(0.5)
           与其他许多答案不同,它可以使用不同长度的字符串正常工作,因为它会清空带有空格的行。也适用于Windows。qet 2018-11-04尝试这个:
        import time
        while True:
            print("Hi ", end="\r")    
            time.sleep(1)    
            print("Bob", end="\r")    
            time.sleep(1)
        它对我有用。 end="\r"部分正在覆盖前一行。 实质性的东西(你不必阅读): 这种类型的行返回称为回车符,它将光标移动到行的开头。当你按Enter键时,它的作用是创建一个新行,然后将光标移动到新行,然后将其移动到开头(如果还没有)。这源于打字机,无论何时将马车(顶部的条形物)一直向左推,而不是沿着一条线。这会覆盖该行上的内容,但是较旧的打字机只是将它放在上一个字母的顶部,所以它看起来很糟糕。你今天可以购买的打字机在写完之前会删除任何东西。 我知道这是一个编写代码的地方,但我无法抗拒给一点历史课。 如果我有任何错误,请在下面的评论中告诉我。xsit 2018-11-0
 for x in range(10):
        time.sleep(0.5)
         # shows how its working               
         print("\r i".format(i)), end="")
        time.sleep(0.5)
        表示如何擦除先前的输出并打印新输出 “\ r”当它在打印消息开始时,它会在新输出之前删除先前的输出。zomnis 2018-11-04
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值