使用python讀取大文件


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方法




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM