使用python讀取大檔案
阿新 • • 發佈:2019-02-11
python中讀取資料的時候有幾種方法,無非是read,readline,readlings和xreadlines幾種方法,在幾種方法中,read和xreadlines可以作為迭代器使用,從而在讀取大資料的時候比較有效果.
在測試中,先建立一個大檔案,大概1GB左右,使用的程式如下:
import os.path import time while os.path.getsize('messages') <1000000000: f = open('messages','a') f.write('this is a file/n') f.close() print 'file create complted'
在這裡使用迴圈判斷檔案的大小,如果大小在1GB左右,那麼結束建立檔案。--需要花費好幾分鐘的時間。
測試程式碼如下:
#22s start_time = time.time() f = open('messages','r') for i in f: end_time = time.time() print end_time - start_time break f.close() #22s start_time = time.time() f = open('messages','r') for i in f.xreadlines(): end_time = time.time() print end_time - start_time break f.close() start_time = time.time() f = open('messages','r') k= f.readlines() f.close() end_time = time.time() print end_time - start_time
使用迭代器的時候,兩者的時間是差不多的,記憶體消耗也不是很多,使用的時間大概在22秒作用
在使用完全讀取檔案的時候,使用的時間在40s,並且記憶體消耗相當嚴重,大概使用了1G的記憶體。。
其實,在使用跌倒器的時候,如果進行連續操作,進行print或者其他的操作,記憶體消耗還是不可避免的,但是記憶體在那個時候是可以釋放的,從而使用迭代器可以節省記憶體,主要是可以釋放。
而在使用直接讀取所有資料的時候,資料會保留在記憶體中,是無法釋放這個記憶體的,從而記憶體卡死也是有可能的。
在使用的時候,最好是直接使用for i in f的方式來使用,在讀取的時候,f本身就是一個迭代器,其實也就是f.read方法