2017-04-14 8 views
0

私はテキストファイル(20行)を読んでいて、テキストの複数の場所で以下のコードを検索して置き換えています。Python 2.7 - テキストを読み込んで同じファイルに置き換えて書き直します

with open(r"c:\TestFolder\test_file_with_State.txt","r+") as fp: 
    finds = 'MI' 
    pattern = re.compile(r'[,\s]+' + re.escape(finds) + r'[\s]+') 
    textdata = fp.read() 
    line = re.sub(pattern,'MICHIGAN',textdata) 
    fp.write(line) 

同じファイルに書き戻そうとすると、以下のエラーが発生します。

IOError         Traceback (most recent call last) 
<ipython-input> in <module>() 
     6  line = re.sub(pattern,'MICHIGAN',textdata) 
     7  print line 
----> 8  fp.write(line) 
     9 

これは私が間違っていることです。

+3

テキストを書き戻す前に、この 'fp.seek(0)'を実行します。 – bernie

答えて

1

あなたはすでにファイルを読み込んでいますので、ファイルの最後にいるので、テキストを書き込む場所はありません。また、あなたはそれを再度追加することができますので、空白が正規表現によって消費されている周囲のfp.seek(0)

バックファイルの先頭に行くことによってこれを回避することができます

だからあなたのコードは次のようになり:

with open(r"c:\TestFolder\test_file_with_State.txt","r+") as fp: 
    finds = 'MI' 
    pattern = re.compile(r'[,\s]+' + re.escape(finds) + r'[\s]+') 
    textdata = fp.read() 
    line = re.sub(pattern,' MICHIGAN ',textdata) 
    fp.seek(0) 
    fp.write(line) 
関連する問題