本文目錄一覽:
python 讀取大文件數據怎麼快速讀取
python中讀取數據的時候有幾種方法,無非是read,readline,readlings和xreadlines幾種方法,在幾種方法中,read和xreadlines可以作為迭代器使用,從而在讀取大數據的時候比較有效果.
在測試中,先創建一個大文件,大概1GB左右,使用的程序如下:
[python] view plaincopyprint?
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左右,那麼結束創建文件。–需要花費好幾分鐘的時間。
測試代碼如下:
[python] view plaincopyprint?
#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方法
python用numpy加載超過200M的文本數據就會報內存錯誤怎麼辦
嘗試過以下幾種方法:
1.使用numpy genfromtxt加載,成功讀取完了,但數據變形了(2列的數據變一列了…)。看了一下genfromtxt源碼,不過也是逐行讀取文本並以tuple形式存入一個list中,解決不了根本問題啊。
2.調大python的使用內存。覺得應該是python限制了可用內存,調大點應該有點效果,不過一直不知道有沒有這個方法。
3.嘗試hadoop。了解一下以後覺得是殺雞用牛刀了。要處理的數據在幾百M到1G這樣。
如何用python快速讀取幾G以上的大文件
如果你沒那麼大的內存 解決方法有幾個:
使用swap 一次性read()讀取
系統層面分割大文件為數個小於系統內存的小文件,分別讀取
使用python 按數據大小逐塊讀取,使用完數據即釋放該部分內存:
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/306415.html