Eğer çok fazla veri yazıyorsanız ve hız büyük olasılıkla gitmeniz gereken bir konudur f.write(...)
. Hızlı bir hız karşılaştırması yaptım ve print(..., file=f)
çok sayıda yazma işleminden çok daha hızlıydı .
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
Makinemde ortalama olarak 2.45'lerde bitti, oysa print
yaklaşık 4 kat daha uzun sürdü (9.76s). Bununla birlikte, çoğu gerçek dünya senaryosunda bu bir sorun olmayacaktır.
Eğer gitmeyi print(..., file=f)
seçerseniz, muhtemelen yeni satırı zaman zaman bastırmak veya başka bir şeyle değiştirmek isteyeceksiniz. Bu, isteğe bağlı end
parametre ayarlanarak yapılabilir ;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Hangi yolu seçerseniz seçin with
, kodun okunmasını kolaylaştırdığı için kullanmanızı öneririm .
Güncelleme : Performanstaki bu fark write
, yüksek oranda arabelleğe alınmış ve diske yazma işlemi gerçekleşmeden önce geri dönen ( bu cevaba bakınız ), oysa print
(muhtemelen) satır arabelleğe alma işleviyle açıklanmaktadır. Bunun için basit bir test, satır arabelleğe alma için dezavantajların (hız açısından) daha az belirgin olacağı uzun yazmaların performansını kontrol etmek olacaktır.
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")
Performans farkı şimdi çok daha az belirgin hale geliyor ve ortalama süresi 2.20s write
ve 3.10s print
. Bu loooong hat performansının düşmesi için bir dizi dizeyi birleştirmeniz gerekiyorsa, print
daha verimli olacağı kullanım durumları biraz nadirdir.