文件写操作,mode为r+,为啥没有替换原来的内容,而是直接在后面追加了? with open('data2.txt', mode ='r+', encoding='utf-8') as f: print(f.read()) f.write('\n this is hello') f.seek(0) print(f.read()) data2.txt, 原来的内容 this is jack 执行上段代码后,应该替换,但是没有替换,输出了 this is jack this is hello

当使用mode='r+'打开文件时,文件指针默认位于文件开头。在这种模式下写入数据时,它会将内容直接追加到当前文件指针的位置,而不是替换原来的内容。

在你的例子中,初始时文件指针位于开头,所以f.write('\n this is hello')会将新的内容追加到已有内容的后面。然后,当你使用f.seek(0)将文件指针移动到开头时,再次读取文件的时候,它会从文件开头开始读取,因此你会看到之前的内容和新追加的内容都被输出了。

如果你想要替换文件中的内容,可以使用mode='w'或者mode='r+'后接f.truncate(0)清空原有内容再进行写入操作。请注意,在使用mode='w'打开文件时,原有内容会被完全清空。