Si está escribiendo una gran cantidad de datos y la velocidad es una preocupación que probablemente debería seguir f.write(...)
. Hice una comparación de velocidad rápida y fue considerablemente más rápido que print(..., file=f)
cuando realizaba una gran cantidad de escrituras.
import time
start = start = time.time()
with open("test.txt", 'w') as f:
for i in range(10000000):
# print('This is a speed test', file=f)
# f.write('This is a speed test\n')
end = time.time()
print(end - start)
En promedio, write
terminé en 2.45s en mi máquina, mientras que print
tardó aproximadamente 4 veces más (9.76s). Dicho esto, en la mayoría de los escenarios del mundo real, esto no será un problema.
Si elige ir print(..., file=f)
, probablemente encontrará que querrá suprimir la nueva línea de vez en cuando, o reemplazarla por otra cosa. Esto puede hacerse configurando el end
parámetro opcional , por ejemplo;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
De cualquier forma que elija, le sugiero que use, with
ya que hace que el código sea mucho más fácil de leer.
Actualización : esta diferencia en el rendimiento se explica por el hecho de que write
está altamente protegida y regresa antes de que se realicen las escrituras en el disco (vea esta respuesta ), mientras que print
(probablemente) usa el almacenamiento en línea de la memoria intermedia. Una prueba simple para esto sería verificar el rendimiento de escrituras largas también, donde las desventajas (en términos de velocidad) para el almacenamiento en línea serían menos pronunciadas.
start = start = time.time()
long_line = 'This is a speed test' * 100
with open("test.txt", 'w') as f:
for i in range(1000000):
# print(long_line, file=f)
# f.write(long_line + '\n')
end = time.time()
print(end - start, "s")
La diferencia de rendimiento ahora se vuelve mucho menos pronunciada, con un tiempo promedio de 2.20s para write
y 3.10s para print
. Si necesita concatenar un montón de cadenas para obtener este rendimiento de línea tan largo, sufrirá, por lo que los casos de uso donde print
serían más eficientes son un poco raros.