Si vous écrivez beaucoup de données et que la vitesse est un problème, vous devriez probablement y aller f.write(...)
. J'ai fait une comparaison de vitesse rapide et c'était beaucoup plus rapide que print(..., file=f)
lors de l'exécution d'un grand nombre d'écritures.
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 moyenne, write
j'ai terminé en 2,45 secondes sur ma machine, alors qu'il a print
fallu environ 4 fois plus de temps (9,76 secondes). Cela étant dit, dans la plupart des scénarios du monde réel, ce ne sera pas un problème.
Si vous choisissez d'y aller, print(..., file=f)
vous constaterez probablement que vous voudrez supprimer la nouvelle ligne de temps en temps, ou la remplacer par autre chose. Cela peut être fait en définissant le end
paramètre facultatif , par exemple;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Quelle que soit la manière que vous choisissez, je suggère d'utiliser with
car cela rend le code beaucoup plus facile à lire.
Mise à jour : Cette différence de performances s'explique par le fait qu'elle write
est hautement tamponnée et retourne avant que les écritures sur le disque n'aient réellement lieu (voir cette réponse ), alors que print
(probablement) utilise la mise en mémoire tampon des lignes. Un test simple pour cela serait de vérifier les performances pour les écritures longues également, où les inconvénients (en termes de vitesse) pour la mise en mémoire tampon de ligne seraient moins prononcés.
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 différence de performances devient maintenant beaucoup moins prononcée, avec un temps moyen de 2,20 s pour write
et 3,10 s pour print
. Si vous avez besoin de concaténer un tas de chaînes pour obtenir cette longue ligne, les performances en souffriront, donc les cas d'utilisation print
qui seraient plus efficaces sont un peu rares.