Digamos que queremos implementar un equivalente de PHP file_get_content
.cómo obtener el contenido de un pequeño archivo ascii en python?
¿Cuál es la mejor práctica? (elegante y confiable)
Aquí hay alguna proposición, ¿están correctas?
usando with
declaración:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
es el uso estándar open()
seguro?
def file_get_contents(filename):
return open(filename).read()
¿Qué sucede con el descriptor de archivo en cualquiera de las soluciones?
de PEP 343: http://www.python.org/dev/peps/pep-0343 Tenga en cuenta que no estamos garantizando que la cláusula finally se ejecuta inmediatamente después de que el objeto se convierte en generador sin uso, a pesar de que esto es cómo funcionará en CPython. Esto es similar a los archivos de auto-cierre: mientras que una implementación de referencia, contando como CPython desasigna un objeto tan pronto como la última referencia a ella desaparece, las implementaciones que utilizan otros algoritmos de GC no hacen la misma garantía. Esto se aplica a Jython, IronPython y, probablemente, a Python que se ejecuta en Parrot. – kriss
@kriss: Tenga en cuenta que eso no contradice la afirmación acerca de cómo ejecutar '__exit__' cuando sale del cuerpo - que sólo detalla qué sucede si no lo hace ** ** salir del cuerpo por tener un generador suspendido dentro del gestor de contexto, y cómo Python lo obligará a irse al plantear una excepción. – Brian