Если вы пишете много данных, и скорость - это проблема, с которой вам, вероятно, стоит пойти 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
бы эффективность была более эффективной, встречаются немного редко.