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 writeskończyłem na 2,45 s na moim komputerze, podczas gdy printzajęł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 endparametr, 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, withponieważ znacznie ułatwia odczytanie kodu.
Aktualizacja : Ta różnica w wydajności jest wyjaśniona faktem, że writejest 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 write3,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 printbyłyby bardziej wydajne, są nieco rzadkie.