2010-03-03 234 views
16

如果我嘗試執行以下代碼錯誤的文件描述符錯誤

f = file('test','rb') 
fout = file('test.out','wb') 

for i in range(10): 
    a = f.read(1) 
    fout.write(a) 

f.close() 
f = fout 
f.seek(4) 

print f.read(4) 

'test'是任意文件,我得到:

Traceback (most recent call last): 
    File "testbad.py", line 12, in <module> 
    print f.read(4) 
IOError: [Errno 9] Bad file descriptor 

但是,如果我改變只是FOUT線使用臨時文件:

import tempfile 

f = file('test','rb') 
fout = tempfile.NamedTemporaryFile() 

for i in range(10): 
    a = f.read(1) 
    fout.write(a) 

f.close() 
f = fout 
f.seek(4) 

print f.read(4) 

沒有錯誤。有人知道爲什麼嗎?我希望第一個案例能夠奏效,但我一定在做錯事。

在此先感謝您的幫助!

回答

33

您只打開文件fout進行書寫,而不是閱讀。要打開都使用

fout = file('test.out','r+b') 
+1

我不知道,如果/當事情發生了變化,但根據當前的文檔,以及我個人的經驗,你現在需要使用「R +」或「R + B」打開文件的閱讀和寫作https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files – JonoCoetzee 2015-07-17 09:35:10

+0

@JonoCoetzee看來,這兩個工作等效,但我已經編輯它是更好與文檔保持一致。謝謝。 – cobbal 2015-07-18 04:46:36

相關問題