Якщо ви пишете багато даних, швидкість викликає занепокоєння 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було б ефективніше, є дещо рідкісними.