2010-01-23 10 views
10

Ciągnięcie za włosy tutaj ... bawię się z tym przez ostatnią godzinę, ale nie mogę zrobić tego, co chcę, tj. usuń sekwencję nowej linii.rstrip nie usuwa znaku nowej linii, co ja robię źle?

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

Odpowiedz

17

Wskazówka znajduje się w sygnaturze rstrip.

Zwraca kopię napisu, ale z pożądanym pozbawiony znaków, więc trzeba przypisać line nowej wartości:

line = line.rstrip('\n') 

Umożliwia to czasami bardzo poręcznym łańcuchowych operacji:

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

Jak Max. S mówi w komentarzach, Python ciągi są niezmienne, co oznacza, że ​​każdy „mutacji” operacja przyniesie zmutowaną kopię.

Tak to działa w wielu frameworkach i językach. Jeśli naprawdę potrzebujesz mieć zmienny typ łańcucha (zwykle ze względu na wydajność), istnieją klasy bufora ciągów.

+6

Ogólnie rzecz biorąc, ciągi znaków w języku Python są niezmienne. Po utworzeniu nie można ich zmienić. Dowolna funkcja, która robi coś dla ciągu, zwraca kopię. –

+0

Rzeczywiście. Może powinienem to powiedzieć w odpowiedzi. – Skurmedel

+0

Dzięki, ja nowy to musi być coś prostego, ... moja własna wina dla tylko skimming przez dokument Pythona. – volting

3

można zrobić to tak

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

Jak wspomniano w odpowiedzi Skurmedel i komentarzach, trzeba zrobić coś takiego:

stripped_line = line.rstrip() 

a następnie wypisać stripped_line.

Powiązane problemy