我想做什么:
现在,修改后的文本应仅包含已修改的内容,但不包含初始内容。
我们可以通过仅使用open()
函数设置mode参数来实现吗?
如果是,参数应该是什么?
如果不是,我们可以通过一个声明来实现吗?
我用2语句实现了这个,如下所示
replace_pattern = re.compile(r"<.+?>",re.DOTALL)
def text_process(file):
with open(file,'r') as f:
text = f.read()
with open(file,'w') as f:
f.write(replace_pattern.sub('',text))
答案 0 :(得分:3)
如果要使用“固定”版本替换文件中的文本,则必须重新打开文件,或者以r+
(读取+写入)模式打开文件并在写入之前截断:
with open(file,'r+') as f:
text = f.read()
f.seek(0)
f.truncate()
f.write(replace_pattern.sub('',text))
如果您没有先截断文件,那么您就有可能写出太少的新字节。您阅读foo bar baz
并写出foo spam
,然后您的文件最终为foo spambaz
,因为旧数据未被移除且更长。