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