seek(),然后读取(),然后在python中写入()

dap*_*hez 7 python file-io

运行以下python代码时:

>>> f = open(r"myfile.txt", "a+")        
>>> f.seek(-1,2)                                        
>>> f.read()                                            
'a'                                                     
>>> f.write('\n')                                        
Run Code Online (Sandbox Code Playgroud)

我得到以下(有用)例外:

Traceback (most recent call last):      
  File "<stdin>", line 1, in <module>   
IOError: [Errno 0] Error        
Run Code Online (Sandbox Code Playgroud)

用"r +"打开时会发生同样的事情.

这应该失败吗?为什么?

编辑:

  1. 显然,这只是一个例子,而不是我实际上想要执行的.我的实际目标是在添加新行之前验证文件以"\n"结尾,或者添加一个.
  2. 我在Windows XP下工作,它们存在于Python 2.5和Python 2.6中.
  3. 我设法通过再次调用seek()来绕过这个问题:

    f = open(r"myfile.txt","a +")
    f.seek(-1,2)
    f.read()
    '
    a'f.seek(-10,2)
    f.write('\n')

第二次搜索呼叫的实际参数似乎并不重要.

Lan*_*son 5

这似乎是特定于Windows的问题 - 有关类似问题,请参阅http://bugs.python.org/issue1521491.

更好的是,在http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html上给出并解释了一个解决方法,插入:

f.seek(f.tell())
Run Code Online (Sandbox Code Playgroud)

read()和write()之间的调用.

  • 或者更确切地说,f.seek(0,1),以避免额外的函数调用. (3认同)