246 votes

Comment empêcher l'impression Python d'ajouter des nouvelles lignes ou des espaces ?

En python, si je dis

print 'h'

J'obtiens la lettre h et un saut de ligne. Si je dis

print 'h',

J'obtiens la lettre h et pas de nouvelle ligne. Si je dis

print 'h',
print 'm',

J'obtiens la lettre h, un espace et la lettre m. Comment puis-je empêcher Python d'imprimer l'espace ?

Les instructions d'impression sont différentes itérations de la même boucle, je ne peux donc pas utiliser l'opérateur +.

4 votes

Mes expériences actuelles suggèrent qu'il n'y a pas suivi de l'espace. Il s'agit plutôt d'un espace de tête si et seulement si l'opération de sortie précédente était un print . Pour vous voir, intercaler quelques appels à print '.', y sys.stdout.write(',') . C'est fou. Pourquoi devrait-il se "souvenir" de ce qui s'est passé avant, et changer de comportement en conséquence ?

306voto

Federico A. Ramponi Points 23106

Sur Python 3 utiliser

print('h', end='')

pour supprimer le terminateur de fin de ligne, et

print('a', 'b', 'c', sep='')

pour supprimer le séparateur d'espace entre les éléments. Voir la documentation pour print

63 votes

Vous pouvez from __future__ import print_function dans Python 2.6

14 votes

De futur L'importation de la fonction print_function interrompra toute autre instruction d'impression utilisant l'ancienne syntaxe dans le même module. Ainsi, bien qu'elle soit plus élégante que sys.stdout.write, le changement peut demander plus de travail.

0 votes

Aussi pratique, si vous avez besoin d'écraser la dernière ligne, utilisez end='\r'

203voto

Greg Hewgill Points 356191
import sys

sys.stdout.write('h')
sys.stdout.flush()

sys.stdout.write('m')
sys.stdout.flush()

Vous devez appeler sys.stdout.flush() car sinon, le texte sera conservé dans un tampon et vous ne le verrez pas.

23 votes

Cela a bien fonctionné pour moi. N'oubliez juste pas de faire un sys.stdout.flush() lorsque vous êtes prêt à l'afficher à l'écran, sinon il le maintiendra dans un tampon et vous ne le verrez pas. Je l'utilise pour donner un retour visuel qu'un script est toujours en cours d'exécution quand il passe par un long while ou une boucle for.

6 votes

Si la saisie est un problème, n'oubliez pas que vous pouvez faire : log = sys.stdout.write

5 votes

Pour l'utiliser, vous devez importer sys en utilisant import sys

44voto

Dan Points 1582

Greg a raison vous pouvez utiliser sys.stdout.write

Peut-être, cependant, devriez-vous envisager de remanier votre algorithme pour accumuler une liste de <whatevers> et ensuite

lst = ['h', 'm']
print  "".join(lst)

1 votes

Comme une variation de cet idiome : print ''.join(map(str,[1, '+', 2, '=', 3]))

19voto

Dustin Getz Points 8514
print "%s%s%s%s" % ('a','s','d','f')

19voto

tzot Points 32224
Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere

Mais en réalité, vous devriez utiliser sys.stdout.write directement.

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