运行以下python代码时:
>>> f = open(r"myfile.txt", "a+")
>>> f.seek(-1,2)
>>> f.read()
'a'
>>> f.write('\n')
我得到以下(有用的)例外:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 0] Error
用“r +”打开时会发生同样的事情。
这应该失败吗?为什么?
编辑:
我设法通过再次调用seek()来绕过这个问题:
f = open(r“myfile.txt”,“a +”)
f.seek(-1,2)
f.read()
'A'
f.seek(-10,2)
f.write('\ n')
第二次搜寻电话的实际参数似乎并不重要。
答案 0 :(得分:5)
这似乎是特定于Windows的问题 - 有关类似问题,请参阅http://bugs.python.org/issue1521491。
更好的是,在http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html给出并解释了一种解决方法,插入:
f.seek(f.tell())
read()和write()调用之间的。
答案 1 :(得分:1)
a +模式用于附加,如果你想阅读&amp;写,你正在寻找r +。
试试这个:
>>> f = open("myfile.txt", "r+")
>>> f.write('\n')
修改强>
你应该最初指定你的平台......在windows中寻找已知的问题。在尝试搜索时,UNIX和Win32分别具有不同的行结尾,LF和CRLF。读取到文件末尾也存在问题。我认为你正在寻找文件末尾的seek(2)偏移量,然后从那里继续。
您可能会对这些文章感兴趣(第二个更具体):
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-08/2512.html
http://mail.python.org/pipermail/python-list/2002-June/150556.html
答案 2 :(得分:0)
适合我:
$ 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()
你在窗户上吗?如果是,请在模式中尝试'rb+'
而不是'r+'
。