web-dev-qa-db-fra.com

Comment garder Python print sans ajouter de nouvelles lignes ou d'espaces?

En python, si je dis

print 'h'

Je reçois la lettre h et une nouvelle ligne. Si je dis

print 'h',

Je reçois la lettre h et pas de nouvelle ligne. Si je dis

print 'h',
print 'm',

Je reçois 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 simplement utiliser l'opérateur +.

228
Bart

Vous pouvez utiliser:

sys.stdout.write('h')
sys.stdout.write('m')
195
Greg Hewgill

Juste un commentaire. Dans Python , vous utiliserez

print('h', end='')

pour supprimer le terminateur de ligne de fond, et

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

pour supprimer le séparateur d'espaces entre les éléments.

278

Greg a raison-- vous pouvez utiliser sys.stdout.write

Peut-être, cependant, devriez-vous envisager de refactoriser votre algorithme pour accumuler une liste de <whatevers>, puis

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

Ou utilisez un +, à savoir:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls

Assurez-vous simplement que tous sont des objets concaténables.

27
pablo
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.

20
tzot

Pour être complet, un autre moyen consiste à effacer la valeur de l'espace logiciel après avoir effectué l'écriture.

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"

impressions helloworld !

Utiliser stdout.write () est probablement plus pratique dans la plupart des cas.

16
Brian

Cela peut paraître stupide, mais semble être le plus simple:

    print 'h',
    print '\bm'
13
Abd

Reprenez le contrôle de votre console! Simplement:

from __past__ import printf

__past__.py contient:

import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)

ensuite:

>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>

Bonus supplémentaire: Si vous n'aimez pas print >> f, ..., vous pouvez étendre cette câperie à fprintf (f, ...).

9
John Machin

Je ne suis pas en train d'ajouter une nouvelle réponse. Je mets simplement la réponse la mieux marquée dans un meilleur format. Je peux voir que la meilleure réponse par notation est d'utiliser sys.stdout.write(someString). Vous pouvez essayer ceci:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")

donnera:

HelloWorld

C'est tout.

8
joker

Dans python 2.6:

>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>

Donc, en utilisant print_function from __future__, vous pouvez définir explicitement les paramètres sep et fin de la fonction print.

5
Benjamin

Vous pouvez utiliser print comme la fonction printf en C.

par exemple.

affiche "% s% s"% (x, y)

2
techdude101

sys.stdout.write est (en Python 2) la seule solution robuste. Python 2 l'impression est insensée. Considérons ce code:

print "a",
print "b",

Ceci imprimera a b, vous laissant supposer qu'il s'agit d'un espace de fin. Mais ce n'est pas correct. Essayez ceci à la place:

print "a",
sys.stdout.write("0")
print "b",

Ceci imprimera a0b. Comment expliquez-vous celà? Où sont passés les espaces?

Je n'arrive toujours pas à comprendre ce qui se passe vraiment ici. Quelqu'un pourrait-il regarder par-dessus mon meilleur conjecture:

Ma tentative de déduire les règles lorsque vous avez un , final sur votre print:

Tout d'abord, supposons que print , (in Python 2) n'imprime aucun espace (espaces ni nouvelles lignes).

Python 2 fait toutefois attention à la façon dont vous imprimez - utilisez-vous print ou sys.stdout.write ou autre chose? Si vous passez deux appels consécutifs à print, alors Python insistera pour insérer un espace entre les deux.

1
Aaron McDaid
print("{0}{1}{2}".format(a, b, c))
1
Michael Murphy
print('''first line \
second line''')

il va produire

première ligne deuxième ligne

0
ahmed khattab
import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
0
Mrinal