我是python的新手,正在编写一些脚本来自动从FTP服务器等下载文件。我想显示下载的进度,但我希望它保持在相同的位置,例如:
输出:
正在下载文件FooFile.txt [47%]
我试图避免这样的事情:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
我该怎么做呢?
重复:How can I print over the current line in a command line application?
答案 0 :(得分:228)
您也可以使用回车符:
sys.stdout.write("Download progress: %d%% \r" % (progress) )
sys.stdout.flush()
答案 1 :(得分:25)
使用类似curses module:
的终端处理库curses模块提供了curses库的接口,这是便携式高级终端处理的事实标准。
答案 2 :(得分:20)
我喜欢以下内容:
print 'Downloading File FooFile.txt [%d%%]\r'%i,
演示:
import time
for i in range(100):
time.sleep(0.1)
print 'Downloading File FooFile.txt [%d%%]\r'%i,
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
演示:
import time
for i in range(100):
time.sleep(0.1)
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
答案 3 :(得分:15)
多次打印退格符\b
,然后用新号码覆盖旧号码。
答案 4 :(得分:7)
#kinda like the one above but better :P
from __future__ import print_function
from time import sleep
for i in range(101):
str1="Downloading File FooFile.txt [{}%]".format(i)
back="\b"*len(str1)
print(str1, end="")
sleep(0.1)
print(back, end="")
答案 5 :(得分:5)
对于Python 3xx:
import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... {}".format(i)+str(i), end="")
答案 6 :(得分:3)
一直在为我工作的一个简洁的解决方案是:
from __future__ import print_function
import sys
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r')
sys.stdout.flush()
print("")
sys.stdout.flush
非常重要,否则它会变得非常笨重,并且print("")
on for loop exit也很重要。
更新:正如评论中所述,print
也有flush
参数。所以以下内容也适用:
from __future__ import print_function
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r', flush=True)
print("")
答案 7 :(得分:0)
x="A Sting {}"
for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")
for j in range(0,len(y)):
print("\b",end="")
答案 8 :(得分:0)
在 python 3 中,函数 print 可以得到很多参数。
函数 print 的完整签名是:
print(args*, sep=' ', end='\n', file=sys.stdout, flush=False)
当 sep
是来自 args*
的参数的分隔符时,end
是如何结束打印行('\n\ 表示换行)文件是在哪里打印输出(stdout 是 consul),flush 是如果要清理缓冲区。
import sys
a = 'A'
b = 0
c = [1, 2, 3]
print(a, b, c, 4, sep=' * ', end='\n' + ('-' * 21), file=sys.stdout, flush=True)
A * 0 * [1, 2, 3] * 4
---------------------
在python中有很多格式化字符串的方法,甚至是内置的格式化字符串类型。
format()
函数。 (some examples)name = 'my_name'
>>> print('my name is: {}'.format(name))
my name is: my_name
# or
>>> print('my name is: {user_name}'.format(user_name=name))
my name is: my_name
# or
>>> print('my name is: {0}'.format(name))
my name is: my_name
# or using f-strings
>>> print(f'my name is: {name}')
my name is: my_name
# or formatting with %
>>> print('my name is: %s' % name)
my name is: my_name