2017-06-28 9 views
-1

Ich habe mich im Internet umgesehen und kann keine Antwort finden, tut mir leid, wenn ich es verpasst habe.Python zu viel schreiben

Ich versuche, einfach einige Zeilen in einer Datei zu ersetzen, etwas mit dieser modifizierten Datei zu tun, dann schreiben Sie es in den ursprünglichen Zustand. Also behalte ich eine Kopie der Basisdatei, ändere die, in der ich etwas tun muss, schreibe die Basisdatei in die modifizierte um.

Hier ist mein Code:

lines = open('fileToModify').readlines() 
for i, line in enumerate(lines[:]): 
    if "STRING" in line: 
     lines[i] = line.replace("STRING", sys.argv[1]) 
    if "STRING2" in line: 
     lines[i] = line.replace("STRING2", sys.argv[2]) 
pfile = open("fileToModify", "r+") 
pfile.seek(0) 
pfile.writelines(lines) 
pfile.seek(0) 
baseLines = open("baseFile").readlines() 
pfile.writelines(baseLines) 
pfile.close() 

Das Problem ist, dass, wenn ich die Basisdatei zu dem modifizierten eine neu zu schreiben, die letzten 2 Zeichen der Basisdatei in eine neue Zeile der modifizierten Datei kopiert werden. Ich weiß nicht, was ich falsch mache, es kommt mir wirklich komisch vor ...

Auch wenn es einen besseren Weg gibt, diesen Zweck zu erreichen, bin ich bei allen Vorschlägen dabei.

Vielen Dank im Voraus!

+1

Warum schreiben Sie nicht einfach die modifizierten Zeilen in eine zweite temporäre Datei, und verwenden Sie das einfach? Das Überschreiben und Wiederherstellen der ursprünglichen Datei scheint unnötig und fehleranfällig zu sein. – tzaman

+0

@tzaman +1. Ich fühle mich dumm. – LongDuZboub

+0

Also habe ich das gerade gemacht, es kopiert immer noch zu viele Daten in die temporäre Datei (diesmal die 3 letzten Zeichen der Basisdatei). Ich denke ernsthaft, dass ich etwas falsch mache, aber was? – LongDuZboub

Antwort

1
from shutil import copy 

s1, r1 = "STRING", sys.argv[1] 
s2, r2 = "STRING2", sys.argv[2] 

with open("orig_file") as in_f, open("new_file", "w") as out_f: 
    for line in in_f: 
     out_f.write(line.replace(s1, r1).replace(s2, r2)) 

copy("new_file", "orig_file")