Если вы пишете много данных, и скорость - это проблема, вы, вероятно, должны пойти на f.write(...)
. Я сделал быстрое сравнение скорости, и оно было значительно быстрее, чем print(..., file=f)
при выполнении большого количества записей.
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)
В среднем write
финишировал за 2,45 с на моей машине, тогда как print
длился примерно в 4 раза дольше (9,76 с). При этом в большинстве реальных сценариев это не будет проблемой.
Если вы решите перейти с print(..., file=f)
, вы, вероятно, обнаружите, что время от времени вы хотите подавлять символ новой строки или заменять его чем-то другим. Это можно сделать, установив необязательный параметр end
, например;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Какой бы способ вы ни выбрали, я бы предложил использовать with
, поскольку он значительно облегчает чтение кода.
Обновление : это различие в производительности объясняется тем фактом, что write
сильно буферизируется и возвращается до того, как произойдет какая-либо запись на диск (см. этот ответ ), тогда как print
(вероятно) использует буферизацию строки. Простым тестом для этого будет проверка производительности и для длинных записей, где недостатки (с точки зрения скорости) для буферизации строк будут менее выраженными.
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")
Разница в производительности теперь становится гораздо менее выраженной, со средним временем 2,20 с write
и 3,10 с print
. Если вам нужно объединить несколько строк, чтобы получить эту длинную строку, производительность пострадает, поэтому случаи использования, где print
будет более эффективным, немного редки.