Python不换行打印进度条

汲永嘉
2023-12-01

我们需要显示进度条的时候可以考虑使用print函数打印出来,比如像下面的实现方法:

# -*- coding: utf-8 -*-

import time

for i in range(1, 11):
    # do something
    print('*' * i)
    time.sleep(1)

进度效果:

*
**
***
****
*****
******
*******
********
*********
**********

由于print的end参数默认'\n'是会换行的,所以我们看到的进度条是换行的,效果并不是我们想要的在同一行显示。

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

我们先看一下\r的含义,\r表示在本行的开头继续输出,区别与\n在下一行输出。如下面的代码所示使用\r,内容123会本行abcdefg继续输出把abc覆盖了,最终显示123defg。

>>> print('abcdefg\n123')
abcdefg
123
>>>
>>> print('abcdefg\r123')
123defg
>>>
>>> print('abcdefg\r12345')
12345fg
>>>

利用\r的特性我们就可以在同一行显示进度条了:

>>> import time
>>> for i in range(1, 11):
...     # do something
...     print('*' * i, end='\r')
...     time.sleep(1)
...
**********
>>>

 

 类似资料: