2012-02-03 49 views
5

在阅读一些文章后,似乎你可以打开一个文件,用'r +'或'w +'模式阅读和书写。然而,试图利用这些模式总是给我怪异的结果:蟒蛇打开('文件','R +')给出奇怪的结果

  1. 如果我使用“R +”,称file.read(),然后调用file.write(“STR”), 就会有如果我使用'r +',调用file.write('str'),然后调用file.read(), 它会返回意想不到的很长的错误内容(貌似有些物体的内部 )
  2. 如果我使用 'W +',调用file.read()将返回空字符串

我想要做的是打开文件,读取内容,修改它,然后回写。目前我用'r'打开它,更改内容,然后用'w'再次打开并回写。这是做这件事的好方法吗?

有在http://snipt.org/zglJ0

一个例子,我使用的是Window 7和Python 2.7.2

+3

你能分享一个代码片段来演示这个问题吗? – 2012-02-03 15:15:44

+0

以上三个实验都是通过file.close()关闭的。但是,在同一个实验中(不在中间调用close()),似乎同时执行read()和write()会导致奇怪的结果。 – 2012-02-03 15:18:53

+0

这是在Windows和Linux? – tMC 2012-02-03 15:26:25

回答

5

和阅读之间切换编写在一个更新已打开的文件时,您必须flush()模式。或者我认为你也可以seek()。这是由Python 2.x中的Windows文件实现中的一些奇怪行为引起的;他们将它固定在3.x.

+0

嗨,Kindall!感谢您的答案,但刷新方法似乎并没有工作(是的,我正在使用Windows和Python 2.7.2)。我的代码如下: '>>> f = open('f1.txt〜','r +') >>> f.read() 'blablabl' >>> f.flush() >> > f.write( 'AAA') 回溯(最近最后调用): 文件 “”,第1行,在 f.write( 'AAA') IO错误:[错误0]错误 >> > f.close()' – 2012-02-03 15:24:10

+1

然后您可以尝试'f.seek(0,1)'(寻找文件中的当前位置)。 – kindall 2012-02-03 15:26:52

+0

工作正常!在这种情况下,对于每一个不同的动作,关闭并重新开放似乎更具可读性。 – 2012-02-03 15:35:11