2016-03-27 17 views
0

in einer Variablen in Python

Joe;Bloggs;[email protected];0715491874;1 

ich geschrieben habe, eine Funktion, die globale Variable originalInfo enthält gespeichert, um eine Zeile löschen Sie diese Zeile in einer Textdatei mehr löschen Informationen dieser Art enthält. Es funktioniert, aber es ist wirklich klobig und unelegant.

f = open("input.txt",'r') # Input file 
    t = open("output.txt", 'w') #Temp output file 

    for line in f: 
     if line != originalInfo: 
      t.write(line) 

    f.close() 
    t.close() 
    os.remove("input.txt") 
    os.rename('output.txt', 'input.txt') 

Gibt es eine effizientere Möglichkeit, dies zu tun? Danke

+0

, die im Prinzip sieht okay, aber ich bezweifle, Sie Matches zu bekommen, weil Ihrer 'originalInfo' fehlt der Zeilenumbruch. Ich schlage auch vor, die Eigenschaften des Kontextmanagers der Dateiobjekte zu verwenden. – timgeb

+1

Die einzige Möglichkeit, eine elegante Funktion dafür zu haben, besteht darin, ein besseres Dateiformat zu verwenden. –

+0

Dies scheint ein geeigneterer Job für 'sed' zu sein, wenn diese Option für Sie verfügbar ist. 'sed -i '/ pattern to match/d'./input.txt' – cmh

Antwort

0

Ihre Lösung funktioniert fast, aber Sie müssen sich um den abschließenden Zeilenumbruch kümmern. Dies ist etwas kürzere Version, zu tun, was Sie beabsichtigen:

import shutil 

with open("input.txt",'r') as fin, open("output.txt", 'w') as fout: 
    for line in fin: 
     if line.strip() != originalInfo: 
      fout.write(line) 
shutil.move('output.txt', 'input.txt') 

Die strip() etwas zusätzlicher Aufwand ist aber würde zusätzliche Leerräume abstreifen. Alternativ , könnten Sie tun:

originalInfo += '\n' 

und später in der Schleife:

if line != originalInfo: 
0

Sie können die Datei öffnen, lesen Sie es durch readlines(), schließen Sie es und öffnen Sie sie wieder zu schreiben. Mit auf diese Weise müssen Sie nicht eine Ausgabedatei erstellen:

with open('input.txt') as file: 
    lines = file.readlines 

with open('input.txt') as file: 
    for line in lines: 
     if line != originalInfo: 
      file.write(line) 

Aber wenn Sie eine Ausgabe haben wollen:

with open('input.txt') as input: 
    with open('output.txt', 'w') as output: 
     for line in input: 
      if line != originalInfo: 
       output.write(line) 
Verwandte Themen