Se stai scrivendo molti dati e la velocità è una preoccupazione che probabilmente dovresti seguire f.write(...)
. Ho fatto un confronto veloce della velocità ed è stato notevolmente più veloce rispetto a print(..., file=f)
quando ho eseguito un gran numero di scritture.
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)
In media write
ho finito in 2,45 secondi sulla mia macchina, mentreprint
voluti circa 4 volte di più (9,76 secondi). Detto questo, nella maggior parte degli scenari del mondo reale questo non sarà un problema.
Se scegli di andare con print(..., file=f)
te probabilmente scoprirai che vorresti sopprimere la nuova riga di volta in volta, o sostituirla con qualcos'altro. Questo può essere fatto impostando il end
parametro opzionale , ad es.
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Qualunque modo scegliate, suggerirei di utilizzarlo with
poiché rende il codice molto più facile da leggere.
Aggiornamento : questa differenza nelle prestazioni è spiegata dal fatto che write
è altamente bufferizzato e ritorna prima che avvenga qualsiasi scrittura su disco (vedi questa risposta ), mentre print
(probabilmente) usa il buffering di linea. Un semplice test per questo sarebbe quello di verificare le prestazioni anche per le scritture lunghe, in cui gli svantaggi (in termini di velocità) per il buffering di linea sarebbero meno pronunciati.
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 differenza di prestazioni ora diventa molto meno pronunciata, con un tempo medio di 2,20 write
secondi e 3,10 secondi print
. Se è necessario concatenare un sacco di stringhe per ottenere prestazioni così elevate, ne risentiranno le prestazioni, quindi i casi d'uso in cui print
sarebbe più efficiente sono un po 'rari.