2011-05-12 17 views
12

Soy bastante nuevo en Python, así que con suerte me falta algo obvio aquí, pero me tiene perplejo. Fragmento de mi programa a continuación:.write no funciona en Python

outFile = open('P4Output.txt', 'w') 
outFile.write(output) 
print output 
print "Output saved to \"P4Output.txt\"\n" 

salida se imprime correctamente a la consola, pero si voy a abrir el archivo que está en blanco. Si elimino el archivo y ejecuto mi programa nuevamente, el archivo se crea pero aún está vacío. Usé exactamente el mismo bloque de código en otro programa mío anteriormente y funcionó, y aún funciona. Sin embargo, si abro Python e intento algo simple como:

f = open('test.txt', 'w') 
f.write("test") 

Una vez más, se crea test.txt pero se deja en blanco. ¿Lo que da?

+0

¿Qué devuelve cuando imprime la salida? ¿Has probado outFile.write ('prueba')? – garnertb

Respuesta

30

¿Hizo f.close() al final de su programa?

+0

oops ... se agregó close() y funciona bien – Danny

+2

¿no se archivan los archivos '.close()' cuando sale el intérprete? – dcrosta

+1

Los archivos se cierran cuando existe Python, pero la salida del archivo generalmente se almacena en el búfer y, si no hay línea nueva, el resultado pendiente no se descargará al sistema de archivos. – poke

32

Debido al almacenamiento en búfer, es posible que la cadena no aparezca en el archivo hasta que llame al flush() o close(). Intente llamar al f.close() después de f.write(). También se recomienda usar with con objetos de archivo, automáticamente cerrará el archivo por usted aunque salga del bloque with temprano debido a una excepción o una declaración return.

with open('P4Output.txt', 'w') as f: 
    f.write(output) 
2

Trate de encerrar sus estados de cuenta en un bloque try/catch para saber si algo sucede durante la apertura o escribir en el archivo:

try: 
    outFile = open('P4Output.txt','w') 
    outFile.write(output) 
    outFile.close() 
except IOError as (errno,strerror): 
    print "I/O error({0}): {1}".format(errno, strerror) 

Y siempre cerrar su archivo por lo que el sistema puede eliminar sus datos al archivo antes de cerrarlo.

8

que tiene que hacer un

outFile.flush() 

si desea que los contenidos almacenados temporalmente que se escriben en el disco. Si ha terminado de escribir en el archivo, una llamada file.close vaciará implícitamente los datos almacenados en el búfer antes de cerrar el archivo.

-1

tal vez debería usar la ruta absoluta en lugar de la relativa.

Cuestiones relacionadas