python讀取大文件

最近在學習python的過程當中接觸到了python對文件的讀取。python讀取文件通常狀況是利用open()函數以及read()函數來完成:python

f = open(filename,'r')
f.read()

這種方法讀取小文件,即讀取遠遠大小小於內存的文件顯然沒有什麼問題。可是若是是將一個10G大小的日誌文件讀取,即文件大於內存的大小,這麼處理就有問題了,會形成MemoryError ... 也就是發生內存溢出。函數

發生這種錯誤的緣由在於,read()方法執行操做是一次性的都讀入內存中,顯然文件大於內存就會報錯。學習

解決方法:spa

這裏發現跟read()相似的還有其餘的方法:read(參數)、readline()、readlines()日誌

(1)read(參數):經過參數指定每次讀取的大小長度,這樣就避免了由於文件太大讀取出問題。code

while True:
    block = f.read(1024)
    if not block:
        break

 (2)readline():每次讀取一行對象

while True:
    line = f.readline()
    if not line:
        break

 

(3)readlines():讀取所有的行,構成一個list,經過list來對文件進行處理,可是這種方式依然會形成MemoyErrorblog

for line in f.readlines():
    ....

 

以上基本分析了python中讀取文件的方法,可是總感受不能達到python中所強調的優雅,後來發現了還有下面的解決方法:內存

pythonic(我理解的是很python的python代碼)的解決辦法:get

with open(filename, 'r') as flie:
    for line in file:
        ....

 

對可迭代對象file進行迭代,這樣會自動的使用buffered IO以及內存管理,這樣就沒必要擔憂大文件問題了。

後來,又發現了一個模塊:linecache,這個模塊也能夠解決大文件讀取的問題,而且能夠指定讀取哪一行,

# 輸出第2行
text = linecache.getline(filename, 2)
相關文章
相關標籤/搜索