2010-03-03 13 views
16

Se provo eseguendo il seguente codiceinappropriato di file

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) 

Dove 'test' è un qualsiasi file arbitrario, ottengo:

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

Se, tuttavia, posso cambiare solo la linea fout di utilizzare un file temporaneo:

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) 

Non ci sono errori. qualcuno sà perche è cosi? Mi sarei aspettato che il primo caso funzionasse, ma devo fare qualcosa di sbagliato.

Grazie in anticipo per qualsiasi aiuto!

risposta

33

hai appena aperto il file fout per scrivere, non leggere. Per aprire sia per uso

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

Non so se/quando le cose sono cambiate, ma secondo i documenti attuali, e la mia esperienza personale, è ora necessario utilizzare 'r +' o 'r + b' per aprire una file sia per la lettura e la scrittura https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files – JonoCoetzee

+0

@JonoCoetzee Sembra che entrambi funzionino in modo equivalente, ma l'ho modificato per essere migliore allineato con i documenti. Grazie. – cobbal

Problemi correlati