2010-01-23 9 views
10

Tirando de mi pelo aquí ... he estado jugando con esto durante la última hora, pero no puedo hacer que haga lo que quiero, es decir. eliminar la secuencia de nueva línea.rstrip no elimina el carácter de la nueva línea ¿Qué estoy haciendo mal?

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() 

Respuesta

17

La pista está en la firma de rstrip.

Devuelve una copia de la cadena, pero con los caracteres deseados despojados, por lo que tendrá que asignar line el nuevo valor:

line = line.rstrip('\n') 

Esto permite el encadenamiento a veces muy práctico de las operaciones:

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

Como Max. S dice en los comentarios, cadenas de Python son inmutables que significa que cualquier "mutación" operación dará lugar a una copia mutada.

Así es como funciona en muchos marcos e idiomas. Si realmente necesita tener un tipo de cadena mutable (generalmente por razones de rendimiento), hay clases de búfer de cadena.

+6

En términos más generales, las cadenas en Python son inmutables. Una vez creados, no pueden ser cambiados. Cualquier función que hace algo a una cadena devuelve una copia. –

+0

De hecho. Tal vez debería poner eso en la respuesta. – Skurmedel

+0

Gracias, era nuevo, tenía que ser algo simple, ... mi propia culpa por solo hojear el documento de Python. – volting

3

puede hacerlo de esta manera

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

Como se mencionó en la respuesta de Skurmedel y los comentarios, debe hacer algo como:

stripped_line = line.rstrip() 

y luego escribir stripped_line.

Cuestiones relacionadas