Se você está escrevendo muitos dados e a velocidade é uma preocupação, provavelmente você deve concordar f.write(...)
. Fiz uma comparação rápida de velocidade e foi consideravelmente mais rápida do que print(..., file=f)
na execução de um grande número de gravações.
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)
Em média, write
terminei em 2,45s na minha máquina, enquanto print
demorou cerca de 4 vezes mais (9,76s). Dito isto, na maioria dos cenários do mundo real, isso não será um problema.
Se você optar por acompanhá- print(..., file=f)
lo, provavelmente descobrirá que deseja suprimir a nova linha de tempos em tempos ou substituí-la por outra. Isso pode ser feito configurando o end
parâmetro opcional , por exemplo;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Qualquer que seja a maneira que você escolher, sugiro usar, with
pois torna o código muito mais fácil de ler.
Atualização : Essa diferença de desempenho é explicada pelo fato de write
ser altamente armazenado em buffer e retornar antes que qualquer gravação no disco ocorra (consulte esta resposta ), enquanto print
(provavelmente) usa o buffer de linha. Um teste simples para isso seria verificar o desempenho também para gravações longas, onde as desvantagens (em termos de velocidade) do buffer de linha seriam 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")
A diferença de desempenho agora se torna muito menos acentuada, com um tempo médio de 2,20s para write
e 3,10s para print
. Se você precisar concatenar print
várias seqüências de caracteres para obter esse desempenho muito longo da linha, os casos de uso em que seria mais eficiente são um pouco raros.