Come posso impedire a Python Print di aggiungere nuove righe o spazi? [duplicare]
-
05-07-2019 - |
Domanda
Questa domanda ha già una risposta qui:
- Come stampare senza newline o spazio? 21 risposte
In python, se dico
print 'h'
Ricevo la lettera he una nuova riga. Se dico
print 'h',
Ricevo la lettera h e nessuna riga. Se dico
print 'h',
print 'm',
Ottengo la lettera h, uno spazio e la lettera m. Come posso impedire a Python di stampare lo spazio?
Le istruzioni di stampa sono diverse iterazioni dello stesso ciclo, quindi non posso semplicemente usare l'operatore +.
Soluzione
Puoi usare:
sys.stdout.write('h')
sys.stdout.write('m')
Altri suggerimenti
Solo un commento. In Python 3 , utilizzerai
print('h', end='')
per sopprimere il terminatore di fine riga e
print('a', 'b', 'c', sep='')
per sopprimere il separatore di spazi bianchi tra gli elementi.
Greg ha ragione: puoi usare sys.stdout.write
Forse, però, dovresti considerare il refactoring del tuo algoritmo per accumulare un elenco di < whatevers > e poi
lst = ['h', 'm']
print "".join(lst)
Oppure usa un +
, ovvero:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Assicurati solo che tutti siano oggetti in grado di concatenare.
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
Ma davvero, dovresti usare sys.stdout.write
direttamente.
Per completezza, un altro modo è cancellare il valore di softspace dopo aver eseguito la scrittura.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
stampa helloworld !
L'uso di stdout.write () è probabilmente più conveniente nella maggior parte dei casi.
Questo può sembrare stupido, ma sembra essere il più semplice:
print 'h',
print '\bm'
Riprendi il controllo della tua console! Semplicemente:
from __past__ import printf
dove __past__.py
contiene:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
quindi:
>>> 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: se non ti piace print >> f, ...
, puoi estendere questo cappero a fprintf (f, ...).
Non sto aggiungendo una nuova risposta. Sto solo mettendo la risposta più contrassegnata in un formato migliore.
Vedo che la risposta migliore per valutazione sta usando sys.stdout.write(someString)
. Puoi provarlo:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
produrrà:
HelloWorld
Questo è tutto.
In 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
>>>
Quindi usando print_function di __future__ puoi impostare esplicitamente i parametri sep e end della funzione di stampa.
Puoi usare print come la funzione printf in C.
per es.
stampa "% s% s " % (x, y)
print("{0}{1}{2}".format(a, b, c))
sys.stdout.write
è (in Python 2) l'unica soluzione affidabile. La stampa in Python 2 è folle. Considera questo codice:
print "a",
print "b",
Questo stamperà a b
, portando a sospettare che stia stampando uno spazio finale. Ma questo non è corretto. Prova invece questo:
print "a",
sys.stdout.write("0")
print "b",
Questo stamperà a0b
. Come lo spieghi? Dove sono finiti gli spazi?
Non riesco ancora a capire cosa sta realmente succedendo qui. Qualcuno potrebbe guardare la mia ipotesi migliore:
Il mio tentativo di dedurre le regole quando hai un ,
finale sul tuo print
:
Innanzitutto, supponiamo che print ,
(in Python 2) non stampi alcuno spazio (spazi né newline).
Python 2, tuttavia, presta attenzione al modo in cui stai stampando: stai utilizzando <=> o <=> o qualcos'altro? Se effettui due consecutive verso <=>, Python insisterà nel mettere uno spazio tra i due.
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
print('''first line \
second line''')
produrrà
prima riga seconda riga
Ho avuto lo stesso problema una volta che volevo leggere alcune cifre da un file. L'ho risolto in questo modo:
f = open('file.txt', 'r')
for line in f:
print(str.split(line)[0])