最近處理文字文件時(檔案約2gb大小),出現memoryerror錯誤和檔案讀取太慢的問題,後來找到了兩種比較快large file reading 的方法,本文將介紹這兩種讀取方法。
我們談到「文字處理」時,我們通常是指處理的內容。python 將文字檔案的內容讀入可以操作的字串變數非常容易。檔案物件提供了三個「讀」方法:.read()
、.readline()
和.readlines()
。每種方法可以接受乙個變數以限制每次讀取的資料量,但它們通常不使用變數。.read()
每次讀取整個檔案,它通常用於將檔案內容放到乙個字串變數中。然而.read()
生成檔案內容最直接的字串表示,但對於連續的面向行的處理,它卻是不必要的,並且如果檔案大於可用記憶體,則不可能實現這種處理。下面是read()
方法示例:
try:
f = open('/path/to/file', 'r')
print f.read()
finally:
if f:
f.close()
呼叫read()
會一次性讀取檔案的全部內容,如果檔案有10g,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)
方法,每次最多讀取size個位元組的內容。另外,呼叫readline()
可以每次讀取一行內容,呼叫readlines()
一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。
如果檔案很小,read()
一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)
比較保險;如果是配置檔案,呼叫readlines()
最方便:
處理大檔案是很容易想到的就是將大檔案分割成若干小檔案處理,處理完每個小檔案後釋放該部分記憶體。這裡用了iter & yield
:
for line in f.readlines():
process(line) #
with
語句開啟和關閉檔案,包括丟擲乙個內部塊異常。for line in f
檔案物件f
視為乙個迭代器,會自動的採用緩衝io
和記憶體管理,所以你不必擔心大檔案。
def read_in_chunks(filepath, chunk_size=1024*1024):
"""lazy function (generator) to read a file piece by piece.
default chunk size: 1m
you can set your own chunk size
"""file_object = open(filepath)
while true:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
if __name__ == "__main__":
filepath = './path/filename'
for chunk in read_in_chunks(filepath):
process(chunk) #
用python怎麼讀檔案 python怎麼讀檔案
python怎麼讀檔案?首先,在桌面上建立乙個txt文件,在上面輸入以下內容 你好。hello.abcdefg 啊不錯的風格 推薦 python教程 檢視檔案的屬性,獲取檔案的絕對路徑 d hintsoft hint w7 desktop 檔名是 新建文字文件.txt,用python開啟這個檔案,並...
python怎麼讀 Python中怎麼讀寫檔案
python中對檔案的操作大概分為三步 開啟檔案 操作檔案 讀 寫 追加寫入 關閉檔案。1 無論對檔案做哪種操作,操作前首先要保證檔案被開啟了,即需要乙個開啟的操作。例 open txt 開啟檔案的同時,還要給檔案賦乙個操作許可權,你需要對檔案做什麼,就賦什麼許可權 檔案開啟模式描述 r以唯讀模式開...
python讀音Python怎麼讀
python,英國發音 pa n 美國發音 pa n 空耳讀法為 派森 是由著名的 龜叔 荷蘭人 guidovan rossum 於1989年聖誕節期間,為了打發無聊的聖誕節而編寫發明的一種物件導向的解釋型計算機程式語言。python第乙個公開發行版的python語言發行於1991年。現在全世界差不...