私はpythonが初めてで、FTPサーバーなどからのファイルのダウンロードを自動化するためのスクリプトをいくつか書いています。
出力:
ファイルFooFile.txtのダウンロード[47%]
私はこのようなことを避けようとしています:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
これを行うにはどうすればよいですか?
Duplicate: コマンドラインアプリケーションで現在の行に印刷するにはどうすればよいですか?
キャリッジリターンも使用できます。
sys.stdout.write("Download progress: %d%% \r" % (progress) )
sys.stdout.flush()
curses module のような端末処理ライブラリを使用します。
Cursesモジュールは、ポータブルな高度な端末処理のための事実上の標準であるcursesライブラリへのインターフェースを提供します。
私は次が好きです:
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="")
バックスペース文字\b
を数回印刷してから、古い番号を新しい番号で上書きします。
#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="")
Python 3xxの場合:
import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... {}".format(i)+str(i), end="")
私のために働いてきたきちんとしたソリューションは次のとおりです。
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
は重要です。それ以外の場合は非常に不格好になります。また、forループの終了に対するprint("")
も重要です。
UPDATE:コメントで述べたように、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("")
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="")