2010-01-23 18 views
10

Tirando fuori i miei capelli qui ... ho giocato con questo per l'ultima ora, ma non riesco a farlo fare quello che voglio, cioè. rimuovere la sequenza di nuova riga.rstrip non rimuove newline char cosa sto facendo male?

def add_quotes(fpath): 

     ifile = open(fpath, 'r') 
     ofile = open('ofile.txt', 'w') 

     for line in ifile: 
      if line == '\n': 
       ofile.write("\n\n") 
      elif len(line) > 1: 
       line.rstrip('\n') 
       convertedline = "\"" + line + "\", " 
       ofile.write(convertedline) 

     ifile.close() 
     ofile.close() 

risposta

17

L'indizio è nella firma di rstrip.

Si restituisce una copia della stringa, ma con i caratteri desiderati spogliarono, quindi avrete bisogno di assegnare line il nuovo valore:

line = line.rstrip('\n') 

Questo permette la concatenazione a volte molto utile delle operazioni:

"a string".strip().upper() 

Come Max. S dice nei commenti, stringhe di Python sono immutabili che significa che qualsiasi operazione di "mutazione" produrrà una copia mutata.

Ecco come funziona in molti framework e lingue. Se è davvero necessario avere un tipo di stringa mutabile (di solito per motivi di prestazioni) ci sono classi buffer di stringa.

+6

Più in generale, le stringhe in Python sono immutabili. Una volta creati, non possono essere modificati. Qualsiasi funzione che fa qualcosa a una stringa restituisce una copia. –

+0

Infatti. Forse dovrei metterlo nella risposta. – Skurmedel

+0

Grazie, devo dire che doveva essere qualcosa di semplice, ... la mia colpa è solo per aver sfogliato Python doc. – volting

3

si può fare in questo modo

def add_quotes(fpath): 
     ifile = open(fpath, 'r') 
     ofile = open('ofile.txt', 'w') 
     for line in ifile: 
      line=line.rstrip() 
      convertedline = '"' + line + '", ' 
      ofile.write(convertedline + "\n") 
     ifile.close() 
     ofile.close() 
2

Come accennato in risposta di Skurmedel ei commenti, è necessario fare qualcosa di simile:

stripped_line = line.rstrip() 

e poi scrivere stripped_line.

Problemi correlati