Python處理大檔案

jimmy1357發表於2014-04-12

要將一個4G的文字檔案切分開


讀取文字檔案大致有read() readline()readlines()三種

read()會將所有內容讀入到一個字串中

readlines()將所有內容按行讀取,返回一個列表,列表中每個元素是一個字串,一個字串是一行內容,所以可利用如下格式處理

[python] view plaincopy
  1. for line in f.readlines():       # 1  
  2.     process(line)  

其實在python2.2之後,檔案也是一個物件,甚至可以這樣處理

[python] view plaincopy
  1. for line in f:               # 2  
  2.     process(line)    

readline()每次讀取一行

所以read()及readlines()效率高,但是需要記憶體能放的下

而後一種可以處理比較大的檔案。

在處理時採用第1種方法和第2中方法,都只處理了不到200M的資料……

採用readline()

[python] view plaincopy
  1. line = f.readline()                    #3  
  2. while line:  
  3.     process(line)  
  4.     line = f.readline()  

同樣只處理不到200M,很怪

最終,

[python] view plaincopy
  1. BUFSIZE = 1024                        #4  
  2. lines = f.readlines(BUFSIZE)  
  3. while lines:  
  4.     for line in lines:  
  5.         process(line)  
  6.     lines = readlines(BUFSIZE)  

全部資料處理完畢

但是將BUFSIZE改為10240,又只是處理了不到200M……

=====================================================================================================

自己新建了一個2G左右的檔案,

採用readline()不斷迴圈,可以

採用readlines()指定讀取行數迴圈,可以

採用第1中第2中方法,提示記憶體不足

這才是正常的嘛

效率來說

採用第4種要比第3種快一些


---------------------------------------------------

估計原始檔有錯誤,在檔案中間有符號可以被識別為EOF。但是不知為何BUFSIZE為1024時又可以……

--------------------------------------------------

相關文章