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 comencé a usar Python hasta que salió 2.5, así que estoy acostumbrado al formulario:
with open('file.txt', 'r') as f:
# do stuff with f
Sin embargo, no hay una withdeclaración antes de la 2.5 y tengo problemas para encontrar ejemplos sobre la forma correcta de limpiar un objeto de archivo manualmente.
¿Cuál es la mejor práctica para eliminar objetos de archivo de forma segura cuando se utilizan versiones antiguas de Python?

openfalla, se generará una excepcióntry/finallyincluso antes de ingresar al bloque. Porcloseeso no se llamará. (Es por eso que debe llamaropenantes deltry.)opengenerar una excepción.En la solución anterior, repetida aquí:
f = open('file.txt', 'r') try: # do stuff with f finally: f.close()si sucede algo malo (nunca se sabe ...) después de abrir el archivo correctamente 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()fuente
with open(...)es definitivamente la mejor opción en Python moderno.No es necesario cerrar el archivo de acuerdo con los documentos si lo usa con:
>>> with open('workfile', 'r') as f: ... read_data = f.read() >>> f.closed TrueMás aquí: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
fuente
A continuación, se muestra un ejemplo sobre cómo usar
openy "pythonclosefrom 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 saber cuántas veces ha abierto el archivo para cerrar ese tiempo.
fuente
openpero antesclose, el archivo no se cerrará correctamente con este enfoque. Usarwithotry/finallycierra el archivo correctamente incluso en presencia de excepciones.