2012-02-03 82 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