Respuestas:
Siempre debes usar open().
Como dice la documentación :
Al abrir un archivo, es preferible usar open () en lugar de invocar este constructor directamente. El archivo es más adecuado para las pruebas de tipo (por ejemplo, escribir "isinstance (f, file)").
Además, file() se ha eliminado desde Python 3.0.
Dos razones: la filosofía de pitón de "Debería haber una forma de hacerlo" y fileestá desapareciendo.
filees el tipo real (usando, por ejemplo, file('myfile.txt')está llamando a su constructor). openes una función de fábrica que devolverá un objeto de archivo.
En python 3.0, filese pasará de ser integrado a implementado por múltiples clases en la iobiblioteca (algo similar a Java con lectores almacenados en búfer, etc.)
file()es un tipo, como un int o una lista. open()es una función para abrir archivos y devolverá un fileobjeto.
Este es un ejemplo de cuándo debe usar open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
Este es un ejemplo de cuándo debe usar el archivo:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
Como puede ver, hay una buena razón para que ambos existan, y un claro caso de uso para ambos.
withdeclaración. with open(filename, 'r') as f: \ for line in f: \ process(line). Esto evita el cierre explícito. Python 2.6 y superior admiten de forma nativa la withdeclaración. En Python 2.5, debe agregar from __future__ import with_statementa la parte superior de su código.
fileclase estaba equipada con métodos especiales que se llaman automáticamente cada vez que se abre un archivo a través de una withdeclaración. Estos métodos especiales aseguran que el archivo se abra y cierre de manera adecuada y segura.
Funcionalmente, los dos son iguales; openllamará de filetodos modos, por lo que actualmente la diferencia es una cuestión de estilo. Los documentos de Python recomiendan usar open.
Al abrir un archivo, es preferible usar open () en lugar de invocar el constructor de archivos directamente.
La razón es que en versiones futuras no se garantiza que sean iguales ( opense convertirá en una función de fábrica, que devuelve objetos de diferentes tipos dependiendo de la ruta que se está abriendo).
Solo use open () para abrir archivos. file () en realidad se está eliminando en 3.0, y está en desuso en este momento. Han tenido una especie de relación extraña, pero file () se está ejecutando ahora, por lo que ya no hay que preocuparse.
Lo siguiente es de los documentos de Python 2.6. [material de soporte] agregado por mí.
Al abrir un archivo, es preferible usar open () en lugar de invocar este constructor [file ()] directamente. El archivo es más adecuado para las pruebas de tipo (por ejemplo, escribir isinstance (f, file)
Según el Sr. Van Rossum, aunque open () es actualmente un alias para file (), debe usar open () porque esto podría cambiar en el futuro.