28 votes

python : l'impression en utilisant le retour chariot et la virgule ne fonctionne pas

J'ai besoin d'imprimer sur une ligne dans une boucle (Python 3.x). En cherchant déjà sur SO, j'ai mis cette ligne dans mon code :

print('{0} imported\r'.format(tot),)

Cependant, il imprime toujours plusieurs lignes lorsqu'il est mis en boucle. J'ai également essayé

sys.stdout.write('{0} imported\r'.format(tot))

mais cela ne s'imprime pas n'importe quoi à la console...

Quelqu'un sait-il ce qui se passe ?

31voto

Joris Points 440

Si vous voulez écraser votre dernière ligne, vous devez ajouter \r (retour de caractère) et end="" pour ne pas passer à la ligne suivante.

values = range(0, 100)
for i in values:
    print ("\rComplete: ", i, "%", end="")
print ("\rComplete: 100%")

30voto

senderle Points 41607

Dans le premier cas, certains systèmes traitent \r comme une nouvelle ligne. Dans le second cas, vous n'avez pas flush la ligne. Essayez ceci :

sys.stdout.write('{0} imported\r'.format(tot))
sys.stdout.flush()

Le rinçage de la ligne n'est pas non plus nécessaire sur tous les systèmes, comme me le rappelle Levon - mais c'est généralement une bonne idée lorsque l'on utilise le \r de cette manière.

14voto

Southernal Points 121

Je préfère utiliser la solution de Jan mais de cette manière :

values = range(0, 101)
for i in values:
  print ("Complete: ", i, "%", end="\r")
print ()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X