2017-06-28 12 views
-1

私はウェブを見回して答えを見つけることができませんでした。Pythonがあまりにも多く書く

私は単にファイル内のいくつかの行を置き換えようとしていますが、この変更されたファイルで何かを行い、それを元の状態に書き換えようとしています。だから、私はベースファイルのコピーを保持し、何かをする必要があるファイルを修正し、ベースファイルを変更したものに書き直します。

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() 

問題は、私は修正1のベースファイルを書き換える際に、ベースファイルの最後の2つの文字が変更されたファイルの新しい行にコピーされていることである。

は、ここに私のコードです。私は何が間違っているのかわからない、それは私には本当に奇妙なようだ...

また、この目的を達成するためのより良い方法があれば、私は任意の提案にしています。

ありがとうございます!

+1

変更された行を2番目の一時ファイルに書き込んでそれを使用するだけではどうですか?上書きしてから元のファイルを復元する必要はなく、エラーが発生しやすいようです。 – tzaman

+0

@tzaman +1。私は馬鹿だと感じる。 – LongDuZboub

+0

だから私はちょうどそれをやった、まだそれは一時ファイル(今度はベースファイルの最後の3文字)にあまりにも多くのデータをコピーしています。だから私は真剣に私が何か間違っていると思うが、何? – LongDuZboub

答えて

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") 
関連する問題