Nếu bạn đang viết nhiều dữ liệu và tốc độ là mối quan tâm bạn có lẽ nên đi cùng f.write(...)
. Tôi đã làm một so sánh tốc độ nhanh và nó nhanh hơn đáng kể so với print(..., file=f)
khi thực hiện một số lượng lớn các bài viết.
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)
Trung bình write
hoàn thành trong 2,45 giây trên máy của tôi, trong khiprint
mất khoảng 4 lần thời gian (9,76 giây). Điều đó đang được nói, trong hầu hết các kịch bản trong thế giới thực, điều này sẽ không thành vấn đề.
Nếu bạn chọn đi cùng, có thể print(..., file=f)
bạn sẽ thấy rằng thỉnh thoảng bạn sẽ muốn chặn dòng mới hoặc thay thế nó bằng một thứ khác. Điều này có thể được thực hiện bằng cách đặt end
tham số tùy chọn , ví dụ;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Dù bạn chọn cách nào tôi cũng khuyên bạn nên sử dụng with
vì nó giúp mã dễ đọc hơn nhiều.
Cập nhật : Sự khác biệt về hiệu suất này được giải thích bởi thực tế write
là bộ đệm cao và trả về trước khi bất kỳ ghi vào đĩa thực sự diễn ra (xem câu trả lời này ), trong khi print
(có thể) sử dụng bộ đệm dòng. Một thử nghiệm đơn giản cho điều này sẽ là kiểm tra hiệu năng cho việc viết dài, trong đó những nhược điểm (về tốc độ) đối với bộ đệm dòng sẽ ít rõ ràng hơn.
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")
Sự khác biệt hiệu suất bây giờ trở nên ít rõ rệt hơn, với thời gian trung bình là 2,20 giây write
và 3,10 giây cho print
. Nếu bạn cần nối một chuỗi các chuỗi để có hiệu suất dòng loooong này sẽ bị ảnh hưởng, vì vậy các trường hợp sử dụng print
sẽ hiệu quả hơn là hơi hiếm.