Jika Anda menulis banyak data dan kecepatan adalah masalah yang mungkin harus Anda lakukan f.write(...)
. Saya melakukan perbandingan kecepatan cepat dan itu jauh lebih cepat daripada print(..., file=f)
ketika melakukan banyak menulis.
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)
Rata write
- rata selesai dalam 2,45 detik pada mesin saya, sedangkan print
waktu sekitar 4 kali lebih lama (9,76 detik). Yang sedang berkata, dalam sebagian besar skenario dunia nyata ini tidak akan menjadi masalah.
Jika Anda memilih untuk pergi dengan print(..., file=f)
Anda, Anda mungkin akan ingin menekan baris baru dari waktu ke waktu, atau menggantinya dengan yang lain. Ini dapat dilakukan dengan mengatur end
parameter opsional , misalnya;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Apa pun cara yang Anda pilih, saya sarankan menggunakan with
karena membuat kode lebih mudah dibaca.
Pembaruan : Perbedaan dalam kinerja ini dijelaskan oleh fakta bahwa write
sangat buffered dan kembali sebelum menulis ke disk benar-benar terjadi (lihat jawaban ini ), sedangkan print
(mungkin) menggunakan buffering garis. Tes sederhana untuk ini adalah untuk memeriksa kinerja untuk penulisan yang lama juga, di mana kelemahan (dalam hal kecepatan) untuk buffering garis akan kurang jelas.
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")
Perbedaan kinerja sekarang menjadi jauh lebih sedikit diucapkan, dengan waktu rata-rata 2,20 untuk write
dan 3,10 untuk print
. Jika Anda perlu menyatukan banyak string untuk mendapatkan kinerja garis loooong ini akan menderita, jadi kasus penggunaan di mana print
akan lebih efisien agak jarang.