<p><strong>更新的响应:</p>
<p>这似乎是Windows特有的一个bug-<a href="http://bugs.python.org/issue1521491">http://bugs.python.org/issue1521491</a>。</p>
<p>引用<a href="http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html">http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html</a>中解释的解决方法</p>
<blockquote>
<p>the effect of mixing reads with writes on a file open for update is
entirely undefined unless a file-positioning operation occurs between
them (for example, a seek()). I can't guess what
you expect to happen, but seems most likely that what you
intend could be obtained reliably by inserting</p>
<p>fp.seek(fp.tell())</p>
</blockquote>
<p>介于read()和write()之间。</p>
<p>我的原始响应演示了如何在打开的用于追加工作的同一文件上进行读/写。如果你用的是Windows,那显然不是真的。</p>
<p><strong>原始响应</strong>:</p>
<p>在“r+”模式下,使用write方法将根据指针的位置将字符串对象写入文件。在您的例子中,它将把字符串“Test abc”追加到文件的开头。请参见下面的示例:</p>
<pre><code>>>> f=open("a","r+")
>>> f.read()
'Test abc\nfasdfafasdfa\nsdfgsd\n'
>>> f.write("foooooooooooooo")
>>> f.close()
>>> f=open("a","r+")
>>> f.read()
'Test abc\nfasdfafasdfa\nsdfgsd\nfoooooooooooooo'
</code></pre>
<p>字符串“foooooooooooooo”被追加到文件末尾,因为指针已经在文件末尾。</p>
<p>你是不是在一个区分二进制文件和文本文件的系统上?在这种情况下,您可能需要使用“rb+”作为模式。</p>
<blockquote>
<p>Append 'b' to the mode to open the file in binary mode, on systems
that differentiate between binary and text files; on systems that
don’t have this distinction, adding the 'b' has no effect.
<a href="http://docs.python.org/2/library/functions.html#open">http://docs.python.org/2/library/functions.html#open</a></p>
</blockquote>