2017-04-14 138 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) 
相關問題