Python讀大數(shù)據(jù)txt
如果直接對大文件對象調(diào)用 read() 方法,會導(dǎo)致不可預(yù)測的內(nèi)存占用。好的方法是利用固定長度的緩沖區(qū)來不斷讀取文件內(nèi)容。即通過yield。
在用Python讀一個兩個多G的txt文本時,天真的直接用readlines方法,結(jié)果一運行內(nèi)存就崩了。
還好同事點撥了下,用yield方法,測試了下果然毫無壓力。咎其原因,原來是readlines是把文本內(nèi)容全部放于內(nèi)存中,而yield則是類似于生成器。
代碼如下:
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)用實例:
for text in open_txt('aa.txt'):
print text
例二:
目標(biāo) txt 文件大概有6G,想取出前面1000條數(shù)據(jù)保存于一個新的 txt 文件中做余下的操作,雖然不知道這樣做有沒有必要但還是先小數(shù)據(jù)量測試一下吧。參考這個帖子:我想把一個list列表保存到一個Txt文檔,該怎么保存 ,自己寫了一個簡單的小程序。
====================================================
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 這個庫大家說的很多,官網(wǎng)看看,后面可以好好學(xué)習(xí)一下。
- 在Python中利用Pandas庫處理大數(shù)據(jù)的簡單介紹
- 為什么入門大數(shù)據(jù)選擇Python而不是Java?
- python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法
- python使用pandas處理大數(shù)據(jù)節(jié)省內(nèi)存技巧(推薦)
- Python如何處理大數(shù)據(jù)?3個技巧效率提升攻略(推薦)
- Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解
- 淺談用Python實現(xiàn)一個大數(shù)據(jù)搜索引擎
- Python實現(xiàn)大數(shù)據(jù)收集至excel的思路詳解
- Python實現(xiàn)的大數(shù)據(jù)分析操作系統(tǒng)日志功能示例
- Python大數(shù)據(jù)之網(wǎng)絡(luò)爬蟲的post請求、get請求區(qū)別實例分析
- Python(Pandas、Dask、PySpark等庫)在大數(shù)據(jù)處理中的學(xué)習(xí)心得
相關(guān)文章
pytorch人工智能之torch.gather算子用法示例
這篇文章主要介紹了pytorch人工智能之torch.gather算子用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
python PaddleSpeech實現(xiàn)嬰兒啼哭識別
這篇文章主要為大家介紹了python PaddleSpeech實現(xiàn)嬰兒啼哭識別操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

