¿Cuál es la diferencia entre el archivo y abrir en Python? ¿Cuándo debería usar cuál? (Diga que estoy en 2.5)Python - Cuándo usar el archivo vs abrir
Respuesta
Siempre debe usar open()
.
Como los estados documentation:
Al abrir un archivo, es preferible utilizar abierta() en lugar de invocar esta constructor directamente. el archivo es más adecuado para las pruebas de tipo (por ejemplo, escribiendo "isinstance (f, file)").
También, file()
has been removed desde Python 3.0.
Funcionalmente, los dos son iguales; open
llamará file
de todos modos, por lo que actualmente la diferencia es una cuestión de estilo. El Python docs recomienda usar open
.
Al abrir un archivo, es preferible utilizar open() en lugar de invocar el constructor de archivos directamente.
La razón es que en futuras versiones no se garantiza que sea la misma (open
se convertirá en una función de la fábrica, que devuelve objetos de diferentes tipos, dependiendo de la ruta de su apertura).
open ya es una función de fábrica, por lo que hay diferencias funcionales (por ejemplo, inheritance, isinstance() etc) – Brian
Dos razones: La filosofía python de "Debería haber una forma de hacerlo" y file
se va.
file
es el tipo real (usando, por ejemplo, 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
va a pasar de ser un built-in de ser implementado por múltiples clases en el io
biblioteca (algo similar a Java con lectores tamponadas, etc.)
¿Dos razones para qué? – Matt
utilizar únicamente abierta() 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.
La siguiente es de Python 2.6 documentos. [cosas de corchetes] agregadas por mí.
Al abrir un archivo, es preferible usar open() en lugar de invocar este constructor [file()] directamente. archivo es más adecuado para pruebas de tipo (por ejemplo, escribir isinstance (f, file)
De acuerdo con el Sr. Van Rossum, aunque open() es actualmente un alias para el archivo() debe usar open() porque esto podría cambiar en el futuro.
Eso ya no es cierto en 2.5 –
file
es un tipo, como int
o list
. open()
es una función para abrir archivos, y devolverá un objeto file
.
Este es un ejemplo de cuándo se debe utilizar abierta:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
Este es un ejemplo de cuándo se debe utilizar archivo:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
Como se puede ver, hay una buena razón para ambos para existir, y un caso de uso claro para ambos.
Generalmente, los archivos deben abrirse con la instrucción 'with'. 'con abierto (nombre de archivo, 'r') como f: \ para la línea en f: \ process (línea)'. Esto evita el cierre explícito. Python 2.6 y versiones posteriores soportan nativamente la declaración 'with'. En Python 2.5, debe agregar 'from __future__ import with_statement' a la parte superior de su código. – IceArdor
¿No acabas de redefinir el nombre incorporado en el segundo ejemplo? – planetp
@planetp, el segundo ejemplo simplemente hereda de la clase de archivo. Supongo que es raro que esté en minúscula, pero así es con los tipos básicos (por ejemplo, objeto, str, lista, ...) – yoniLavi
- 1. Cuándo usar atributos vs. cuándo usar propiedades en python?
- 2. Cuándo usar Ruby vs Cuándo usar PHP
- 3. Cuándo usar node.js vs sinatra vs rails?
- 4. ¿Cuándo usar Literal vs LiteralControl?
- 5. Cuándo usar strtr vs str_replace?
- 6. Cuándo usar SQLITE_TRANSIENT vs SQLITE_STATIC?
- 7. cuándo usar Set vs. Collection?
- 8. Cuándo usar Algoritmos genéticos vs. cuándo usar redes neuronales?
- 9. Cuándo usar Class.isInstance() y cuándo usar el operador instanceof?
- 10. ¿Por qué es preferible abrir() sobre el archivo() en Python?
- 11. Cuándo utilizar Tuberías vs Cuándo usar Memoria compartida
- 12. Cuándo usar MojoExecutionException vs MojoFailureException en Maven
- 13. Cuándo usar clases estáticas vs instanciadas
- 14. ¿Cuándo usar el cierre?
- 15. Pepino: Cuándo usar etiquetas/ganchos vs fondos
- 16. Android: ¿Cuándo usar Service vs Singleton?
- 17. Cuándo usar actores locales vs remotos?
- 18. Cuándo usar $ stderr vs STDERR en Ruby?
- 19. HDFS vs GridFS: ¿Cuándo usar qué?
- 20. Cuándo usar printf/scanf vs cout/cin?
- 21. IEnumerable, IEnumerator vs foreach, cuándo usar lo
- 22. ¿Cuándo usar UserControl vs. Control en Silverlight?
- 23. Cuándo usar Spring Integration vs. Camel?
- 24. Flex - Remoting vs HTTPService - cuándo usar qué?
- 25. https vs ssl- cuándo usar lo que
- 26. ¿Cuándo debería usar make_heap vs. Priority Queue?
- 27. Herencia privada VS composición: cuándo usar qué?
- 28. Android: Cuándo usar Dialog vs. Activity
- 29. ¿Cuándo deberíamos usar Mockery vs JUnit4Mockery?
- 30. ¿Puede Python abrir un archivo mp3
Esto es angustiante, ya que la documentación utilizada para indicar "El constructor de archivos() es nuevo en Python 2.2. La ortografía anterior, open(), se conserva para la compatibilidad y es un alias para el archivo()." Desde que decidí RTFM hace diez años, y fui muy aficionado a la unificación de tipos y clases, nunca utilicé open() nuevamente. Además, todavía siento que el constructor de tipos es la forma más obvia de devolver un archivo como objeto, ubicado por la ruta arg, y comportarse como se solicita en el modo arg. Especialmente me siento así cuando la intención obvia de los desarrolladores en ese momento era 2 retener open4compat. – umeboshi