2017-03-03 7 views
1

Ich habe eine Textdatei foo.txt einen Text in einer Datei Zeile zu aktualisieren, die wie folgt aussieht:, wie durch die Linie

first 01 
start 
some thing 01 
and more 101 
i dont care 
end 
i dont care 
final 01 

ich all mit zwischen den Zeilen ersetzen Start und Ende im gleichen foo.txt wie so:

first 01 
start 
some thing 10 
and more 110 
i dont care 
end 
i dont care 
final 01 

Der Code, den ich bisher haben wie folgt aussieht:

import re 
from tempfile import mkstemp 
from shutil import move 
from os import remove, close 
def replace(foo.txt): 
    searchStart = re.compile("^start") 
    searchEnd = re.compile("^end") 
    pattern = "01" 
    subst = "10" 
    fh, abs_path = mkstemp() 
    search = 0 
    with open(abs_path,'w') as new_file: 
     with open(file_path) as old_file: 
      for line in old_file: 
       if searchEnd.search(line): 
        search = 0 
       elif searchStart.search(line): 
        search = 1 
       if search == 1: 
        new_file.write(re.sub(pattern,subst,line)) 
       else: 
        new_file.write(line) 
    close(fh) 
    remove(foo.txt) 
    move(abs_path, foo.txt) 

Es tut, was ich will, aber ich wollte wissen, ob es für das Schreiben des Codes eine andere effiziente Art und Weise ist. Ich bin von einem eingebetteten Hintergrund und so verwendete ich Flag wie Suche in meinem Code.

Danke!

Antwort

0

Ich bin mir nicht ganz sicher, ob Sie die Datei zeilenweise lesen und schreiben möchten, aber statt Ihrer Vorgehensweise würde ich die Datei einfach in eine Stringvariable einlesen und dann alle Vorkommen von '01 ersetzen 'mit' 10 '. Ihr Code würde ungefähr so ​​aussehen.

with open('testPy.txt', "r+") as f: 
    data = f.read().replace('01', '10') 
    f.seek(0) 
    f.write(data) 

Die Funktion seek (0) setzt den Dateioffset an den Anfang der Datei. Schreiben von diesem Punkt wird daher die gesamte Datei überschreiben.

+0

Danke für den Vorschlag. aber ich möchte nicht die gesamte Datei ersetzen, ich möchte die Linie nur zwischen Anfang und Ende ersetzen –

Verwandte Themen