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 with
declaració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?
open
falla, se generará una excepcióntry/finally
incluso antes de ingresar al bloque. Porclose
eso no se llamará. (Es por eso que debe llamaropen
antes deltry
.)open
generar 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 True
Má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
open
y "pythonclose
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 saber cuántas veces ha abierto el archivo para cerrar ese tiempo.
fuente
open
pero antesclose
, el archivo no se cerrará correctamente con este enfoque. Usarwith
otry
/finally
cierra el archivo correctamente incluso en presencia de excepciones.