Tôi đang làm việc trên một tập lệnh đọc một thư mục tệp (mỗi kích thước từ 20 MB đến 100 MB), sửa đổi một số dữ liệu trong mỗi dòng và ghi lại một bản sao của tập tin.Python writelines() và write() sự khác biệt lớn về thời gian
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.writelines('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
Khi chạy mã này với một tệp 90 MB (~ 900.000 dòng), nó in 140 giây khi mất thời gian để ghi vào tệp. Ở đây tôi đã sử dụng writelines()
. Vì vậy, tôi đã tìm kiếm các cách khác nhau để cải thiện tốc độ ghi tệp và trong hầu hết các bài viết mà tôi đọc, nó cho biết write()
và writelines()
không hiển thị bất kỳ sự khác biệt nào kể từ khi tôi viết một chuỗi nối. Tôi cũng đã kiểm tra thời gian thực hiện chỉ các tuyên bố sau:
new_string = '\n'.join(new_my_list) + '\n'
Và nó chỉ mất 0,4 giây, vì vậy thời gian lớn chụp là không phải vì tạo danh sách. Chỉ cần thử write()
Tôi đã thử mã này:
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.write('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
Và nó in 2,5 giây. Tại sao có sự khác biệt lớn trong thời gian ghi tệp cho write()
và writelines()
mặc dù dữ liệu đó giống nhau? Đây có phải là hành vi bình thường hoặc có điều gì đó sai trong mã của tôi không? Các tập tin đầu ra có vẻ giống nhau cho cả hai trường hợp, vì vậy tôi biết rằng không có mất dữ liệu.
upvote cho việc tìm cách xoắn sử dụng writelines với kết quả mong đợi và tìm thấy cảnh báo bất ngờ. –
Ngoài ra, hàm clean_data() của tôi cũng sẽ xóa từng hàng, vì vậy các dòng mới sẽ bị loại bỏ. –