Comment puis-je empêcher l'impression Python d'ajouter des lignes ou des espaces? [dupliquer]

cette question a déjà une réponse ici:

  • comment imprimer sans newline ni espace? 25 réponses

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 saut de 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 des itérations différentes de la même boucle, donc je ne peux pas juste utiliser l'opérateur+.

216
demandé sur Antti Haapala 2008-11-01 01:33:21

16 réponses

vous pouvez utiliser:

sys.stdout.write('h')
sys.stdout.write('m')
183
répondu Greg Hewgill 2008-10-31 22:35:49

juste un commentaire. Dans Python 3 , vous utiliserez

print('h', end='')

pour supprimer le terminateur d'extrémité, et

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

pour supprimer le séparateur d'espace entre les articles.

253
répondu Federico A. Ramponi 2008-11-01 02:07:05

Greg a raison-- vous pouvez utiliser sys.la sortie standard stdout.écrire

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

lst = ['h', 'm']
print  "".join(lst)
42
répondu Dan 2008-10-31 22:53:52

ou utiliser un + , i.e.:

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

assurez-vous juste que tous sont des objets concaténables.

25
répondu 2011-08-02 22:19:59
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 vraiment, vous devriez utiliser sys.stdout.write directement.

20
répondu tzot 2008-11-01 00:21:28

pour être complet, une autre façon consiste à effacer la valeur de l'espace logiciel après avoir exécuté l'écriture.

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

imprime helloworld !

utilisant stdout.write() est probablement plus pratique pour la plupart des cas, cependant.

16
répondu Brian 2008-11-01 00:43:51

cela peut sembler stupide, mais semble être le plus simple:

    print 'h',
    print '\bm'
13
répondu Abd 2013-12-19 09:32:40

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)

puis:

>>> 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 extra: si vous n'aimez pas print >> f, ... , vous pouvez étendre ce caper à fprintf(f, ...).

9
répondu John Machin 2009-06-24 04:26:03

Je n'ajoute pas de nouvelle réponse. Je mets simplement la réponse la mieux notée dans un meilleur format. Je vois que la meilleure réponse en cotant est sys.stdout.write(someString) . Vous pouvez essayer ceci:

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

donnera:

HelloWorld

C'est tout.

7
répondu joker 2014-10-13 15:46:56

en 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
>>>

ainsi, en utilisant print_function de __future__ vous pouvez définir explicitement les paramètres sep et end de la fonction d'impression.

5
répondu Benjamin 2014-04-23 14:27:07

vous pouvez utiliser l'impression comme la fonction printf en C.

p.ex.

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

2
répondu techdude101 2014-01-26 22:06:39
print("{0}{1}{2}".format(a, b, c))
0
répondu Michael Murphy 2014-07-10 21:13:39

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

print "a",
print "b",

ceci imprimera a b , ce qui vous mènera à soupçonner qu'il imprime un espace arrière. Mais ce n'est pas correct. Essayez plutôt ceci:

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

ce sera imprimé a0b . Comment l'expliquez-vous? où sont passés les espaces?

Je n'arrive toujours pas à comprendre ce qui se passe vraiment ici. Quelqu'un pourrait-il regarder ma meilleure supposition:

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

tout d'abord, supposons que print , (en Python 2) n'imprime aucun espace (espaces ou ).

Python 2 fait, cependant, attention à comment imprimez - vous-utilisez-vous print , ou sys.stdout.write , ou autre chose? Si vous faites deux appels consécutifs à print , alors Python insistera pour mettre un espace entre les deux.

0
répondu Aaron McDaid 2014-12-04 13:41:52
import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
0
répondu Mrinal 2015-04-18 07:21:47
print('''first line \
second line''')

il produira

première ligne deuxième ligne

0
répondu ahmed khattab 2017-02-18 19:21:28

j'ai eu le même problème une fois que j'ai voulu lire quelques chiffres d'un dossier. Je l'ai résolu comme ceci:

f = open('file.txt', 'r')
for line in f:   
    print(str.split(line)[0])
-3
répondu AminM 2017-05-01 16:29:50