2010-01-23 4 views
10

Ich ziehe meine Haare hier raus ... habe die letzte Stunde damit herumgespielt, aber ich kann nicht erreichen, dass ich das mache, was ich will. Entferne die Newline-Sequenz.rstrip löscht nicht newline char Was mache ich falsch?

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

Antwort

17

Der Hinweis ist in der Signatur rstrip.

Es erstellt eine Kopie der Zeichenfolge zurück, aber mit den gewünschten Zeichen entfernt, so müssen Sie line den neuen Wert zuzuweisen:

line = line.rstrip('\n') 

Diese sehr praktisch Verkettung von Operationen für die manchmal erlaubt:

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

Wie Max. S sagt in den Kommentaren, Python-Strings sind unveränderlich, was bedeutet, dass jede "mutierende" Operation eine mutierte Kopie ergeben wird.

So funktioniert es in vielen Frameworks und Sprachen. Wenn Sie einen veränderbaren String-Typ benötigen (normalerweise aus Performance-Gründen), gibt es String-Buffer-Klassen.

+6

Allgemein sind Strings in Python unveränderlich. Einmal erstellt, können sie nicht geändert werden. Jede Funktion, die etwas mit einem String ausführt, gibt eine Kopie zurück. –

+0

In der Tat. Vielleicht sollte ich das in die Antwort aufnehmen. – Skurmedel

+0

Danke, ich neu es musste etwas Einfaches sein, ... meine eigene Schuld nur für Python Doc. – volting

3

Sie können es so machen

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

Wie in Skurmedel Antwort und den Kommentaren angedeutet, müssen Sie etwas tun:

stripped_line = line.rstrip() 

und dann stripped_line schreiben.