2016-06-28 5 views
0

Say my-Datei wie folgt aussehen:Stop Ersatz durch Muster?

some lines 
tom 
some lines 
beginword a b 
some lines 
endword 
jim 
some lines 
beginword x y 
some lines 
endword 
... 

sein wollen:

some lines 
tom 
some lines 
beginword ZZ b 
some lines 
endword 
jim 
some lines 
beginword x y 
some lines 
endword 

Also dieser Code meine Python ist:

input = open("file", "r") 
output = open("file_updated", "w") 
dummy = "" 
item = [] 
for line in input: 
    dummy += line 
    if line.find("tom" + "\n") != -1: 
     for line in input: 
      if line.find("beginword") != -1: 
       item = line.split() 
       dummy += item[0] + " w " + item[-1] + "\n" 
      else: 
       dummy += line 
output.write(dummy) 
input.close() 
output.close() 

Es ersetzt alle Zeilen enthalten "beginword", include die linien gehören zu "jim", wie kann ich den ersatz durch "endword" zu "tom" stoppen?

Antwort

0

Verwenden break Anweisung

input = open("file", "r") 
output = open("file_updated", "w") 
dummy = "" 
item = [] 
for line in input: 
    dummy += line 
    if line.find("tom" + "\n") != -1: 
     for line in input: 
      # check for endword and exit for loop 
      if line.find("endword" + "\n") == 0: 
       dummy += line      
       break 

      if line.find("beginword") != -1: 
       item = line.split() 
       dummy += item[0] + " w " + item[-1] + "\n" 
      else: 
       dummy += line 
output.write(dummy) 
input.close() 
output.close() 

Außerdem haben Sie einen Blick auf diese:

+0

Hinzufügen von zwei Zeilen wie Ihr die Zeile enthalten "endword" gehören zu Tom gegangen – user6255179

+0

Ich hatte habe meine Antwort sofort bearbeitet, nachdem ich gepostet habe, um die if-Bedingung zu ändern, und habe 'dummy + = line' hinzugefügt. Siehst du diese Zeile noch? – Sundeep