天天看點

Python 檔案讀取的不同方法比對

Python 讀檔案的方式多種多樣,但是當需要讀取一個大檔案的時候,不同的讀取方式會有不一樣的效果。

場景

逐行讀取一個 2.9G 的大檔案

  • CPU i7 6820HQ
  • RAM 32G

方法

對每一行的讀取進行一次分割字元串操作

以下方法都使用 with...as 方法打開檔案。

with 語句适用于對資源進行通路的場合,確定不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如檔案使用後自動關閉、線程中鎖的自動擷取和釋放等。

方法一 最通用的讀檔案方式

with open(file, 'r') as fh:
  for line in fh.readlines():
    line.split("|")
           

運作結果: 耗時 15.4346568584 秒

系統螢幕中顯示記憶體從 4.8G 一下子飙到了 8.4G, fh.readlines() 将讀取的所有行資料存到記憶體,這種方法适合小檔案。

方法二

with open(file, 'r') as fh:
  line = fh.readline()
  while line:
    line.split("|")
           

運作結果: 耗時 22.3531990051 秒

記憶體幾乎沒有變化,因為記憶體中隻存取一行的資料,但是時間明顯比上一次的長,對于進一步處理資料來說效率不高。

方法三

with open(file) as fh:
  for line in fh:
    line.split("|")
           

運作結果: 耗時 13.9956979752 秒

記憶體幾乎沒有變化,速度也比方法二快。

for line in fh 将檔案對象 fh 視為可疊代的,它自動使用緩沖的 IO 和記憶體管理,是以您不必擔心大檔案。這是很 pythonic 的方式!

方法四 fileinput 子產品

for line in fileinput.input(file):
  line.split("|")
           

運作結果: 耗時 26.1103110313 秒

記憶體增加了 200-300 MB,速度是以上最慢的。

總結

以上方法僅供參考,公認的大檔案讀取方法還是三最好。但是具體情況還是要根據機器的性能、處理資料的複雜度。

原文位址:

Python 檔案讀取的不同方法比對

我的部落格:

時空路由器