Python讀大數(shù)據(jù)txt
如果直接對(duì)大文件對(duì)象調(diào)用 read() 方法,會(huì)導(dǎo)致不可預(yù)測(cè)的內(nèi)存占用。好的方法是利用固定長(zhǎng)度的緩沖區(qū)來(lái)不斷讀取文件內(nèi)容。即通過(guò)yield。
在用Python讀一個(gè)兩個(gè)多G的txt文本時(shí),天真的直接用readlines方法,結(jié)果一運(yùn)行內(nèi)存就崩了。
還好同事點(diǎn)撥了下,用yield方法,測(cè)試了下果然毫無(wú)壓力。咎其原因,原來(lái)是readlines是把文本內(nèi)容全部放于內(nèi)存中,而yield則是類(lèi)似于生成器。
代碼如下:
def open_txt(file_name):
with open(file_name,'r+') as f:
while True:
line = f.readline()
if not line:
return
yield line.strip()
調(diào)用實(shí)例:
for text in open_txt('aa.txt'):
print text
例二:
目標(biāo) txt 文件大概有6G,想取出前面1000條數(shù)據(jù)保存于一個(gè)新的 txt 文件中做余下的操作,雖然不知道這樣做有沒(méi)有必要但還是先小數(shù)據(jù)量測(cè)試一下吧。參考這個(gè)帖子:我想把一個(gè)list列表保存到一個(gè)Txt文檔,該怎么保存 ,自己寫(xiě)了一個(gè)簡(jiǎn)單的小程序。
====================================================
import datetime
import pickle
start = datetime.datetime.now()
print "start--%s" % (start)
fileHandle = open ( 'train.txt' )
file2 = open('s_train.txt','w')
i = 1
while ( i < 10000 ):
a = fileHandle.readline()
file2.write(''.join(a))
i = i + 1
fileHandle.close()
file2.close()
print "done--%s" % ( datetime.datetime.now() - start)
if __name__ == '__main__':
pass
====================================================
pickle 這個(gè)庫(kù)大家說(shuō)的很多,官網(wǎng)看看,后面可以好好學(xué)習(xí)一下。
相關(guān)文章
Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
這篇文章主要介紹了Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python網(wǎng)絡(luò)編程中TCP與UDP協(xié)議客戶(hù)端、服務(wù)器端相關(guān)實(shí)現(xiàn)及使用技巧,需要的朋友可以參考下2018-02-02
使用Python與BigQuery進(jìn)行交互的代碼詳解
在大數(shù)據(jù)分析的領(lǐng)域中,Google BigQuery 是一個(gè)被廣泛使用的云端數(shù)據(jù)倉(cāng)庫(kù)解決方案,它由 Google Cloud 提供,并且專(zhuān)為處理大規(guī)模數(shù)據(jù)集、進(jìn)行快速的數(shù)據(jù)分析和復(fù)雜的查詢(xún)而設(shè)計(jì),本文給大家講解了如何使用Python與BigQuery進(jìn)行交互,需要的朋友可以參考下2025-04-04
詳解python selenium 爬取網(wǎng)易云音樂(lè)歌單名
這篇文章主要介紹了python selenium爬取網(wǎng)易云音樂(lè)歌單名,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
在django中,關(guān)于session的通用設(shè)置方法
今天小編就為大家分享一篇在django中,關(guān)于session的通用設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python調(diào)用webservice接口的實(shí)現(xiàn)
這篇文章主要介紹了python調(diào)用webservice接口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python獲取外網(wǎng)IP并發(fā)郵件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇python獲取外網(wǎng)IP并發(fā)郵件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10

