Pregunta Python: cuándo usar el archivo vs abierto


¿Cuál es la diferencia entre archivo y abrir en Python? ¿Cuándo debería usar cuál? (Digamos que estoy en 2.5)


127
2017-09-22 03:04


origen


Respuestas:


Siempre debes usar open().

Como el documentación estados:

Al abrir un archivo, es preferible   usar open () en lugar de invocar esto   constructor directamente. archivo es más   adecuado para las pruebas de tipo (por ejemplo,   escribiendo "isinstance (f, file)").

También, file()  ha sido removido desde Python 3.0.


143
2017-09-22 03:07



Dos razones: la filosofía de Python de "Debería haber una forma de hacerlo" y file se va.

file es el tipo real (usando, p. file('myfile.txt') está llamando a su constructor). open es una función de fábrica que devolverá un objeto de archivo.

En python 3.0 file pasará de ser un built-in a ser implementado por múltiples clases en el io biblioteca (algo similar a Java con lectores de buffer, etc.)


31
2017-09-22 03:10



file es un tipo, como int o list. open() es una función para abrir archivos, y devolverá un file objeto.

Este es un ejemplo de cuándo deberías usar abrir:

f = open(filename, 'r')
for line in f:
    process(line)
f.close()

Este es un ejemplo de cuándo deberías 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 caso de uso claro para ambos.


19
2017-09-22 03:32



Funcionalmente, los dos son iguales; open llamará file De todos modos, actualmente la diferencia es una cuestión de estilo. los Documentos de Python recomendar el uso open.

Al abrir un archivo, es preferible usar open () en lugar de invocar el constructor del archivo directamente.

La razón es que en versiones futuras no se garantiza que sean iguales (open se convertirá en una función de fábrica, que devuelve objetos de diferentes tipos según la ruta que esté abriendo).


6
2017-09-22 03:08



Solo use open () para abrir archivos. file () se está eliminando realmente en 3.0, y está obsoleto en este momento. Han tenido una especie de relación extraña, pero el archivo () se está ejecutando ahora, por lo que no hay necesidad de preocuparse más.

Lo siguiente es de los documentos Python 2.6. [cosas de corchetes] agregadas 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)


4
2017-09-22 03:10



Según el Sr. Van Rossum, aunque open () es actualmente un alias para el archivo () debe usar open () porque esto podría cambiar en el futuro.


2
2017-09-22 03:12