Jeśli piszesz dużo danych, a szybkość jest problemem, prawdopodobnie powinieneś iść f.write(...)
. Zrobiłem szybkie porównanie prędkości i było ono znacznie szybsze niż print(..., file=f)
podczas wykonywania dużej liczby zapisów.
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)
Średnio write
skończyłem na 2,45 s na moim komputerze, podczas gdy print
zajęło to około 4 razy dłużej (9,76 s). To powiedziawszy, w większości rzeczywistych scenariuszy nie będzie to problemem.
Jeśli zdecydujesz się iść z print(..., file=f)
tym, prawdopodobnie okaże się, że będziesz chciał od czasu do czasu wyłączyć nową linię lub zastąpić ją inną. Można tego dokonać ustawiając opcjonalny end
parametr, np.;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Jakikolwiek sposób wybierzesz, sugeruję użycie, with
ponieważ znacznie ułatwia odczytanie kodu.
Aktualizacja : Ta różnica w wydajności jest wyjaśniona faktem, że write
jest wysoce buforowana i powraca zanim nastąpi jakikolwiek zapis na dysk (zobacz tę odpowiedź ), podczas gdy print
(prawdopodobnie) używa buforowania linii. Prostym testem byłoby sprawdzenie wydajności również przy długich zapisach, gdzie wady (pod względem prędkości) buforowania linii byłyby mniej wyraźne.
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")
Różnica wydajności staje się teraz znacznie mniej wyraźna, ze średnim czasem 2,20 s dla write
3,10 s dla print
. Jeśli musisz połączyć kilka ciągów, aby uzyskać tę dłuższą wydajność linii, ucierpi, więc przypadki użycia, które print
byłyby bardziej wydajne, są nieco rzadkie.