:
这似乎是Windows的错误-http://bugs.python.org/issue1521491。
在http://mail.python.org/pipermail/python-bugs- list/2005-August/029886.html中解释的替代方法的报价
除非在文件之间进行文件定位操作(例如,seek()),否则将读取和写入混合在打开以更新的文件上的影响是完全不确定的。我无法猜出您预期会发生什么,但是似乎最有可能通过插入可靠地获得您的预期
fp.seek(fp.tell())
在read()和您的write()之间。
我的原始回复演示了如何在打开的用于追加的同一文件上进行读取/写入。如果您使用Windows,显然是不正确的。
:
在“ r +”模式下,使用write方法将根据指针所在的位置将字符串对象写入文件。在您的情况下,它将字符串“ Test abc”附加到文件的开头。请参阅以下示例:
>>> 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'
字符串“ foooooooooooooooo”附加在文件末尾,因为指针已经在文件末尾。
您是否在区分二进制文件和文本文件的系统上?在这种情况下,您可能希望使用“ rb +”作为模式。
在区分二进制文件和文本文件的系统上,将“ b”追加到以二进制模式打开文件的模式;在没有此区别的系统上,添加“ b”无效。http://docs.python.org/2/library/functions.html#open