2016-07-11 18 views
-1

Ich habe eine Datei, in der ich suchen muss STR1 und ersetzen Sie die gesamte Zeile mit STR2. Zum Beispiel der file1 enthält folgende DatenPython: Suche nach einem STR1 in einer Zeile und ersetze die ganze Zeile mit STR2

Name: John 
Height: 6.0 
Weight: 190 
Eyes: Blue 

ich für Name in der obigen Datei suchen muß und dann die ganze Linie mit Name: Robert ersetzen. Ich kann dies leicht in sed als

sed -i 's/.*Name.*/Name:Robert/' file1 

erreichen, aber wie Sie das gleiche in Python bekommen. Zum Beispiel kann ich eine Zeichenfolge durch eine andere Zeichenfolge ersetzen fileinput Verwendung als

#! /usr/bin/python 
import fileinput 
for line in fileinput.input("file1", inplace=True): 
    # inside this loop the STDOUT will be redirected to the file 
    # the comma after each print statement is needed to avoid double line breaks 
    print line.replace("Name: John", "Name: Robert"), 

folge Wie der obigen Code zu modifizieren, um die gesamte Zeile zu ersetzen, indem '*' alle Zeilen in der Datei ersetzt sogar mit einer Suchbedingung (if "Name" in line)

+0

Wie funktioniert der obige Code nicht, was Sie wollen und was bedeutet * mit ''*'' ersetzt alle Zeilen in der Datei * bedeuten genau? –

+0

'importieren re; line = re ('. * Name. * /', 'Name: Robert', Zeile) '? –

+0

Ich möchte die Zeichenfolge 'Name' anstelle von' Name: John' als Suche verwenden und die gesamte Zeile ersetzen, da ich den Wert 'John' apriori nicht kenne. Das '*' ersetzt die ganze Datei mit der Zeichenfolge 'Name: Robert' – WanderingMind

Antwort

1

Sie können string.find() verwenden, um festzustellen, ob sich eine Zeichenfolge in einer anderen Zeichenfolge befindet. Related Python docs.

#! /usr/bin/python 
import fileinput 
for line in fileinput.input("file1", inplace=True): 
    if line.find("Name:") >= 0: 
     print "Name: Robert" 
    else: 
     print line[:-1] 
+0

OP weiß bereits über "if" Name "in line", und er hat immer noch Probleme, also bezweifle ich, dass "find" besser ist. – Kevin

+0

Die Linie [: - 1] hat es geschafft. Aber warum ':'? Ich dachte, der letzte Eintrag kann einfach mit '[-1]' – WanderingMind

+0

aufgerufen werden. Mit nur '[-1]' wird auf das letzte Zeichen zugegriffen und der Doppelpunkt verwandelt es in einen Spleiß, so dass jetzt alles vom nullten Index bis zu der letzte Index minus eins. –

1

Sollte genau das tun, was Sie wollen.

def replace_basic(key_to_replace, new_value, file): 
    f = open(file, 'rb').readlines() 
    with open(file, 'wb') as out: 
     for line in f: 
      if key_to_replace in line: 
       out.write(new_value+'/n') #asuming that your format never changes then uncomment the next line and comment out this one. 
       #out.write('{}: {}'.format(key_to_replace, new_value)) 
       continue 
      out.write(line) 
+0

Ich denke du meintest out.write (new_value + '\ n') '. Das funktioniert wie vorgeschlagen. Gibt es eine Möglichkeit, die ursprüngliche Datei in diesem Ansatz zu sichern? – WanderingMind

Verwandte Themen