Read a large file with python
python讀取大文件
- 文件可以自動關(guān)閉
- 異常可以在with塊內(nèi)處理
最大的優(yōu)點:對可迭代對象 f,進行迭代遍歷:for line in f,會自動地使用緩沖IO(buffered IO)以及內(nèi)存管理,而不必?fù)?dān)心任何大文件的問題。
There should be one – and preferably only one – obvious way to do it.
如果想對每次迭代讀取的內(nèi)容進行更細(xì)粒度的處理,可以使用yield生成器來讀取大文件
def readInChunks(file_obj, chunkSize=2048):"""Lazy function to read a file piece by piece. Default chunk size: 2kB."""while True:data = file_obj.read(chunkSize)if not data:breakyield dataf = open('bigFile')for chunk in readInChunks(f):do_something(chunk)f.close()在工作中的日常: 用戶信息,log日志緩存,等都是大文件
補充:linecache模塊
當(dāng)讀取一個文件的時候,python會嘗試從緩存中讀取文件內(nèi)容,優(yōu)化讀取速度,提高效率,減少了I/O操作
linecache.getline(filename, lineno) 從文件中讀取第幾行,注意:包含換行符
linecache.clearcache() 清除現(xiàn)有的文件緩存
linecache.checkcache(filename=None) 檢查緩存內(nèi)容的有效性,可能硬盤內(nèi)容發(fā)生改變,更新了,如果沒有參數(shù),將檢查緩存中的所有記錄(entries)
題目:
現(xiàn)給一個文件400M(該文件是由/etc/passwd生成的),統(tǒng)計其中root字符串出現(xiàn)的次數(shù)
注:有時候這個程序比c,shell快10倍,原因就是,python會讀取cache中的數(shù)據(jù),使用緩存在內(nèi)部進行優(yōu)化,減少i/o,提高效率
References : How to read a large file
轉(zhuǎn)載于:https://www.cnblogs.com/panlq/p/10618852.html
總結(jié)
以上是生活随笔為你收集整理的Read a large file with python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis数据结构:字典(hash表)
- 下一篇: Python基础第三课