我正在研究一個腳本,它讀取文件的文件夾(每個文件的大小從20 MB到100 MB),修改每行中的一些數據,然後回寫該文件的副本。Python writelines()和write()巨大的時差
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.')
在具有90 MB文件(〜90萬線)運行此代碼,就印刷140秒作爲寫入到文件中取出的時間。這裏我用writelines()
。所以我搜索了不同的方法來提高文件寫入速度,在我閱讀的大多數文章中,它說write()
和writelines()
不應該顯示任何區別,因爲我正在編寫單個連接的字符串。我還檢查採取只有以下語句時:
new_string = '\n'.join(new_my_list) + '\n'
前後歷時僅爲0.4秒,所以採取了大量的時間,是因爲創建列表中沒有。 只是嘗試write()
我試過這段代碼:
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.')
它打印2.5秒。爲什麼在write()
和writelines()
的文件寫入時間中存在如此大的差異,即使它是相同的數據?這是正常的行爲還是在我的代碼中有錯?輸出文件對於這兩種情況似乎都是相同的,所以我知道數據沒有丟失。
upvote找到扭曲的方式使用writelines與預期的結果,並找到一個意外的警告。 –
另外我的clean_data()函數去除每一行,所以額外的換行符被刪除。 –