2017-04-14 124 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) 
相关问题