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 +.

È stato utile?

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 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])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top