2017-04-26 21 views
0

投稿と同じように:Replace string in a specific line using python、結果は私のわずかに異なる例ではあまり先入観がありませんでした。非標準テキストファイルの特定の行に文字列を置き換えます

私はWindows 7でpython 3を使用しています。ディレクトリ内の一部のファイルをバッチ編集しようとしています。基本的に.LICタグ付きのテキストファイルです。それが私の問題に関連しているかどうかは分かりません。私はPythonに問題なくファイルを読むことができます。 私の目的は、このファイルの特定の行にある特定の文字列を置き換えることです。

import os 
import re 

groupname = 'Oldtext' 
aliasname = 'Newtext' 

with open('filename') as f: 
    data = f.readlines() 
    data[1] = re.sub(groupname,aliasname, data[1]) 
    f.writelines(data[1]) 

print(data[1]) 
print('done') 

上記のコードを実行すると、UnsupportedOperation: not writableが返されます。変更をファイルに書き戻す際に問題が発生しています。他の投稿の提案に基づいて、私はオプションをopen('filename', "w")機能に追加しました。これにより、ファイル内のすべてのテキストが削除されます。

提案に基づいて、r+オプションが試されました。これにより、ファイルの正常な編集につながりますが、正しい行を編集するのではなく、編集された行がファイルの末尾に追加され、元のまま残されます。

+0

'r +'モードを使ってみてください。読み書きのためにファイルを開きます。 – Wondercricket

+0

私はあなたの提案を試みました。これにより私はファイルを編集することができますが、修正された行は、目的の行を編集するのではなく、単にファイルに追加されます。 – DavidU

答えて

0

変更された行をテキストファイルの中央に書き込むことは、元の文字列とまったく同じ長さでなければ動作しません。これはあなたの例の場合ですが、そこに明白なプレースホルダテキストがあります実際のアプリケーションコードと同じものであるかどうかは分かりません。ここではどのような仮定をしないアプローチがあります:

with open('filename', 'r') as f: 
    data = f.readlines() 
data[1] = re.sub(groupname,aliasname, data[1]) 
with open('filename', 'w') as f: 
    f.writelines(data) 

はEDIT:あなたは本当に戻ってファイルにのみ、単一の行を書きたい場合は、あなたが覚えておくことが、ラインを読む前にf.tell()を使用する必要があるだろうファイル内でのその位置、そしてf.seek()を書き込む前にその位置に戻ります。

+0

素晴らしいです、ありがとうございます。 – DavidU

関連する問題