When running the following python code:
>>> f = open(r\"myfile.txt\", \"a+\")
>>> f.seek(-1,2)
Works for me:
$ echo hello > myfile.txt
$ python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('myfile.txt', 'r+')
>>> f.seek(-1, 2)
>>> f.tell()
5L
>>> f.read()
'\n'
>>> f.write('\n')
>>> f.close()
Are you on windows? If so, try 'rb+'
instead of 'r+'
in the mode.
This appears to be a Windows-specific problem - see http://bugs.python.org/issue1521491 for a similar issue.
Even better, a workaround given and explained at http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html, insert:
f.seek(f.tell())
between the read() and write() calls.
the a+ mode is for appending, if you want to read & write, you are looking for r+.
try this:
>>> f = open("myfile.txt", "r+")
>>> f.write('\n')
Edit:
you should have specified your platform initially... there are known problems with seek within windows. When trying to seek, UNIX and Win32 have different line endings, LF and CRLF respectively. There is also an issue with reading to the end of a file. I think you are looking for the seek(2) offset for the end of the file, then carry on from there.
these articles may be of interest to you (the second one more specifically):
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-08/2512.html
http://mail.python.org/pipermail/python-list/2002-June/150556.html