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+.
16 réponses
vous pouvez utiliser:
sys.stdout.write('h')
sys.stdout.write('m')
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.
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)
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.
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.
cela peut sembler stupide, mais semble être le plus simple:
print 'h',
print '\bm'
reprenez le contrôle de votre console! Simplement:
from __past__ import printf
où __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, ...).
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.
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.
vous pouvez utiliser l'impression comme la fonction printf en C.
p.ex.
print "%s%s "% (x, y)
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.
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
print('''first line \
second line''')
il produira
première ligne deuxième ligne
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])