2013-02-21 13 views
10

ho una lista:Eliminazione di ritorni a capo causati dalla lettura linea

Cat 
Dog 
Monkey 
Pig 

Ho uno script:

import sys 
input_file = open('list.txt', 'r') 
for line in input_file: 
    sys.stdout.write('"' + line + '",') 

L'output è:

"Cat 
","Dog 
","Monkey 
","Pig", 

mi piacerebbe:

"Cat","Dog","Monkey","Pig", 

Non riesco a eliminare il ritorno a capo che si verifica dall'elaborazione delle righe nell'elenco. Punto bonus per sbarazzarsi di, alla fine. Non sei sicuro di come trovare e cancellare l'ultima istanza.

risposta

13

str.rstrip o semplicemente str.strip è lo strumento giusto per dividere il ritorno a capo (newline) dai dati letti dal file. Nota str.strip si spoglia degli spazi bianchi da entrambe le estremità. Se siete interessati solo a strippaggio di ritorno a capo, basta usare strip('\n')

Modificare la linea

sys.stdout.write('"' + line + '",') 

a

sys.stdout.write('"' + line.strip() + '",') 

Nota nel tuo caso, una soluzione più semplice sarebbe stata

>>> from itertools import imap 
>>> with open("list.txt") as fin: 
    print ','.join(imap(str.strip, fin)) 


Cat,Dog,Monkey,Pig 

o Solo utilizzando Elenco Comprensione

>>> with open("test.txt") as fin: 
    print ','.join(e.strip('\n') for e in fin) 


Cat,Dog,Monkey,Pig 
+0

Perché non includere le virgolette come nel output desiderato? –

7

È possibile utilizzare .rstrip() per rimuovere ritorni a capo dal lato destro di una stringa:

line.rstrip('\n') 

o si può dire per rimuovere tutti spazi bianchi (inclusi gli spazi, tabulazioni e ritorni a capo):

line.rstrip() 

Si tratta di una versione più specifica del .strip() method che rimuove gli spazi bianchi o caratteri specifici da entrambi i lati della stringa.

Per la vostra specifica caso, è possibile attaccare con un semplice .strip() ma per il caso generale in cui si desidera rimuovere solo il ritorno a capo, mi piacerebbe restare con `.rstrip ('\ n').

userei un metodo diverso di scrivere le corde però:

with open('list.txt') as input_file: 
    print ','.join(['"{}"'.format(line.rstrip('\n')) for line in input_file]) 

Utilizzando ','.join() si evita l'ultimo comma, e utilizzando il str.format() method è facile per gli occhi di un sacco di concatenazione di stringhe (non per citare più velocemente).

+0

Che cosa sta facendo il formato? Sembra che le stringhe siano passate invariate. – neil

+0

@neil: guarda di nuovo. Ci sono virgolette singole e doppie. –

+0

Buon punto: non me ne sono accorto. Non l'ho notato nemmeno nella domanda, quindi ora vedo che la mia risposta è sbagliata. – neil

1

Prima di tutto, per far apparire tutto su una riga dovresti ottenere la buccia dello '\n'. Trovo che lo line.rstrip('\n') funzioni bene.

Per sbarazzarsi del "," alla fine inserisco tutte le parole in un elenco aggiungendo le virgolette. Quindi, utilizzando join(), unire tutte le parole nella lista con ""

temp = [] 
for line in file: 
    i = line.rstrip('\n') 
    word = '"'+i+'"' 
    temp.append(word) 
print ",".join(temp) 

Questo dovrebbe ottenere il risultato desiderato

Problemi correlati