2016-12-12 1 views
0

Je souhaite utiliser la barre de progression du module Python.Mise à jour de Python Progressbar?

Dans mon cas, je veux rechercher un mot dans une grande liste. Cela marche. Donc j'ai pensé qu'une barre de progression serait sympa. J'ai importé le module et ai essayé:

path = str(raw_input(PATH)) 
word = str(raw_input(WORD)) 
widgets = ['Suche Wort: ', pb.Percentage(), ' ', 
      pb.Bar(marker=pb.RotatingMarker()), ' ', pb.ETA()] 
timer = pb.ProgressBar(widgets=widgets, maxval=10).start() 
loc = -1 

with open(path) as f: 
    for n in range(0,10): 
     timer.update(n) 
     for i, line in enumerate(f): 
      if word in line: 
       timer.update(n) 
       loc = i 
       break 
    timer.finish() 

Mais il y a un problème .. la barre de progression s'arrête à 0% .Lorsque la boucle entière est terminé, il passe à 100%. Pourquoi?! Je ne comprends pas.

Merci d'avance :)!

Répondre

0

Je suppose que vous essayez d'incrémenter la minuterie de 10% à la fois. Vous avez une petite erreur, cependant. L'ordre entre la lecture de f et lorsque vous mettez à jour votre minuterie.

with open(path) as f: 
    for n in range(0,10): 
     timer.update(n) 
     for i, line in enumerate(f): 
      ... 
    timer.finish() 

La première fois que la boucle fonctionne, vous appelez timer.update(0). Ensuite, vous lisez tous les éléments du fichier. En fait, vous commencez à la position actuelle dans le fichier et lisez ligne par ligne jusqu'à ce qu'il n'y ait plus de lignes dans le fichier.

L'itération suivante, vous mettez à jour la barre de progression: timer.update(1). Ensuite, vous lisez tous les éléments du fichier, en commençant à l'endroit où le descripteur de fichier pointe, c'est-à-dire la fin du fichier. La lecture de la fin du fichier à la fin du fichier ne prend pas de temps, donc vous appelez timer.update(2) en un rien de temps, jusqu'à la fin.

Vous avez arbitrairement choisi 10 étapes pour votre barre de progression, que je soupçonne n'est pas liée au nombre de lignes dans f. Si vous connaissez le nombre de lignes dans f, vous pouvez simplement mettre à jour la barre de progression à chaque itération ou toutes les 1000 itérations (if i % 1000 == 0:). Si vous ne le faites pas, vous devrez déterminer le nombre d'octets que vous avez lus jusqu'à présent (par exemple en comptant la longueur des lignes que vous lisez), et rechercher la taille du fichier, et utiliser ces nombres comme base pour votre barre de progression.