2010-03-03 12 views
16

Si intento ejecutar el siguiente códigoarchivo incorrecto

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) 

Dónde 'test' es cualquier archivo arbitrario, me sale:

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

Si sin embargo, cambiar sólo la línea fout utilizar una archivo temporal:

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) 

No hay errores. ¿Alguien sabe a que se debe esto? Hubiera esperado que el primer caso funcionara, pero debo estar haciendo algo mal.

¡Gracias de antemano por cualquier ayuda!

Respuesta

33

solo has abierto el archivo fout para escribir, no para leer. Para abrir tanto para uso

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

No sé si/cuando las cosas cambiaron, pero de acuerdo a los documentos actuales, y mi experiencia personal, ahora tiene que utilizar 'r +' o 'r + b' para abrir una archivo para lectura y escritura https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files – JonoCoetzee

+0

@JonoCoetzee Parece que ambos funcionan de manera equivalente, pero he editado para que sea mejor alineado con los documentos. Gracias. – cobbal

Cuestiones relacionadas