Chciałbym pokazać postęp użytkownika, gdy mój skrypt Pythona przetwarza duży plik.Skrypt, aby pokazać postęp?
Widziałem wydruki skryptowe '\', "|', '/'
w tej samej pozycji kursora w powłoce, aby pokazać postęp.
Jak mogę to zrobić w pythonie?
Chciałbym pokazać postęp użytkownika, gdy mój skrypt Pythona przetwarza duży plik.Skrypt, aby pokazać postęp?
Widziałem wydruki skryptowe '\', "|', '/'
w tej samej pozycji kursora w powłoce, aby pokazać postęp.
Jak mogę to zrobić w pythonie?
Prosty "nieskończony spinner" realizacja:
import sys
import time
import itertools
for c in itertools.cycle('/-\|'):
sys.stdout.write('\r' + c)
sys.stdout.flush()
time.sleep(0.2)
Należy użyć python-progressbar
Jest tak prosty w obsłudze jak:
import progressbar as pb
progress = pb.ProgressBar(widgets=_widgets, maxval = 500000).start()
progvar = 0
for i in range(500000):
# Your code here
progress.update(progvar + 1)
progvar += 1
To pokaże się pasek postępu jak:
Progress: |#################################################### |70%
Jak upvote więcej niż raz? To jest niesamowite! – inspectorG4dget
Jeśli chcesz toczyć własne, może zrobić coś takiego:
import sys, time
for i in range(10):
print ".", # <- no newline
sys.stdout.flush() #<- makes python print it anyway
time.sleep(1)
print "done!"
Spowoduje to wydrukowanie jednej kropki na sekundę, a następnie wydrukowanie "gotowe!"
Albo zwykły helikopter (w Pythonie 3):
import sys, time
for i in range(10):
print("/-\|"[i % 4], end="\b")
sys.stdout.flush() #<- makes python print it anyway
time.sleep(0.1)
print("\ndone!")
Wykonane to dla zabawy. Pokazuje pasek przewijania i ładowanie tekstu. W ten sposób:
|
\ l
- lo
/loa
| load
\ loadi
- loadin
/loading
Kod został przetestowany w systemie Windows.
'''
Spinner and a text showing loading.
'''
import sys
import time
def looper(text):
sys.stdout.write('\r')
sys.stdout.write(text)
sys.stdout.flush()
spinner = ["|", "\\" , "-", "/" ]
loading = ['l','o','a','d','i','n','g']
spin_1 = len(spinner)
spin_2 = len(loading) + 1
print("Starting program...")
for x in range(100):
spin_2mod = x%spin_2
looper(spinner[x%spin_1] + " " + "".join(loading[0: (spin_2mod) ]) + (" " * (spin_2 - spin_2mod)))
time.sleep(0.5)
print("\nExiting program...")
time.sleep(2)
tqdm jest mocniejszy dla tej sprawy. ma lepsze cechy i porównywalność.
jest łatwa do zastosowania, kod może być proste, jak:
from tqdm import tqdm
for i in tqdm(range(10000)):
pass # or do something else
personalizacja jest również łatwy do special cases.
o to demo z repo:
Bardzo interesująca elegancka próbka. Przechodzenie przez znaki w ciągu znaków. Napisałeś to sam czy skądś to wziąłeś? Pytam, ponieważ chciałbym zobaczyć więcej przykładów. – radj