Come le altre risposte spiegano, ogni linea ha un ritorno a capo; quando si print
una stringa nuda, si aggiunge una linea alla fine. Ci sono due modi per aggirare questo; tutto il resto è una variazione delle stesse due idee.
In primo luogo, si può spogliare le nuove righe come li si legge:
with open("a.txt") as f:
for line in f:
print line.rstrip()
Questo eliminerà qualsiasi altro spazio bianco in coda, come spazi o tabulazioni, così come il ritorno a capo. Di solito non ti importa di questo. Se lo fai, probabilmente si desidera utilizzare la modalità a capo universale, e togliere i ritorni a capo:
with open("a.txt", "rU") as f:
for line in f:
print line.rstrip('\n')
Tuttavia, se si conosce il file di testo sarà, ad esempio, un file di Windows-ritorno a capo, o un nativo-to -whichever-platform-sto-running-on-destra-ora-a capo di file, è possibile striscia terminazioni appropriate in modo esplicito:
with open("a.txt") as f:
for line in f:
print line.rstrip('\r\n')
with open("a.txt") as f:
for line in f:
print line.rstrip(os.linesep)
l'altro modo per farlo è quello di lasciare il ritorno a capo originale e basta evitare di stamparne uno in più. Mentre puoi farlo scrivendo a sys.stdout
con sys.stdout.write(line)
, puoi anche farlo da print
stesso.
Se si aggiunge una virgola alla fine dell'istruzione print
, anziché stampare una nuova riga, viene aggiunto uno "spazio intelligente". Exactly what that means è un po 'complicato, ma l'idea dovrebbe essere che aggiunge uno spazio quando dovrebbe, e nulla quando non dovrebbe. Come la maggior parte algoritmi DWIM, non sempre ottiene le cose a posto, ma in questo caso, lo fa:
with open("a.txt") as f:
for line in f:
print line,
Naturalmente Stiamo assumendo che a capo del file corrispondono ai suoi terminal's-se si tenta questo con, diciamo, i classici file Mac su un terminale Unix, finirai per stampare ogni riga sull'ultimo. Di nuovo, puoi aggirare questo usando le newline universali.
Ad ogni modo, è possibile evitare la magia DWIM di spazio intelligente utilizzando la funzione di stampa invece che l'istruzione print. In Python 2.x, si ottiene questo utilizzando una dichiarazione __future__
:
from __future__ import print_function
with open("a.txt") as f:
for line in f:
print(line, end='')
In alternativa è possibile utilizzare una libreria wrapper di terze parti come six
, se si preferisce.
L'OP sta chiaramente usando Python 2, e non sono sicuro che suggerire "print_function" per gli utenti 2.x sia sempre una buona idea. E usare lo spazio morbido magico di 'print' è probabilmente una cattiva idea se non si impara prima cosa significa e come funziona. Il che significa che la tua "scrittura" esplicita potrebbe essere la migliore risposta (motivo per cui ho rilanciato la tua risposta, e penso che l'OP abbia ragione ad accettarlo). – abarnert
REF https://docs.python.org/2/library/functions.html#print –