Cómo abrir/cerrar archivos de forma segura en python 2.4


Actualmente estoy escribiendo un pequeño script para usar en uno de nuestros servidores usando Python. El servidor solo tiene instalado Python 2.4.4.

No empecé a usar Python hasta que salió la versión 2.5, así que estoy acostumbrado a la forma:

with open('file.txt', 'r') as f:
    # do stuff with f

Sin embargo, no hay ninguna instrucción with antes de la versión 2.5, y estoy teniendo problemas para encontrar ejemplos sobre la forma correcta de limpiar un objeto de archivo manualmente.

¿Cuál es la mejor práctica para desechar objetos de archivo de forma segura cuando se utilizan versiones antiguas de python?

Author: TM., 2010-09-22

3 answers

Véase docs.python.org :

Cuando haya terminado con un archivo, llame a f.close() para cerrarlo y liberar cualquier recurso del sistema ocupado por el archivo abierto. Después de llamar a f. close(), los intentos de usar el objeto file fallarán automáticamente.

Por lo tanto, use close() elegantemente con try/finally:

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
    f.close()

Esto asegura que incluso si # do stuff with f genera una excepción, f se cerrará correctamente.

Tenga en cuenta que {[5] } debe aparecer fuera de de el try. Si open genera una excepción, el archivo no se abrió y no necesita ser cerrado. Además, si opengenera una excepción, su resultado es no asignado a f y es un error llamar a f.close().

 125
Author: Jon-Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 07:39:01

En la solución anterior, se repite aquí:

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
   f.close()

Si algo malo sucede (nunca se sabe ...) después de abrir el archivo con éxito y antes del intento, el archivo no se cerrará, por lo que una solución más segura es:

f = None
try:
    f = open('file.txt', 'r')

    # do stuff with f

finally:
    if f is not None:
       f.close()
 28
Author: mljrg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 12:31:18

Aquí está el ejemplo dado que así cómo usar open y " python close

from sys import argv
script,filename=argv
txt=open(filename)
print "filename %r" %(filename)
print txt.read()
txt.close()
print "Change the file name"
file_again=raw_input('>')
print "New file name %r" %(file_again)
txt_again=open(file_again)
print txt_again.read()
txt_again.close()

Es necesario que cuántas veces abriste el archivo tengas que cerrar esas veces.

 -4
Author: Varun Chhangani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 09:08:54