您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python如何流式讀取數G超大文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
如何流式讀取數G超大文件
使用 with...open... 可以從一個文件中讀取數據,這是所有 Python 開發者都非常熟悉的操作。
但是如果你使用不當,也會帶來很大的麻煩。
比如當你使用了 read 函數,其實 Python 會將文件的內容一次性的全部載入內存中,如果文件有 10 個G甚至更多,那么你的電腦就要消耗的內存非常巨大。
# 一次性讀取 with open("big_file.txt", "r") as fp: content = fp.read()
對于這個問題,你也許會想到使用 readline 去做一個生成器來逐行返回。
def read_from_file(filename): with open(filename, "r") as fp: yield fp.readline()
可如果這個文件內容就一行呢,一行就 10個G,其實你還是會一次性讀取全部內容。
最優雅的解決方法是,在使用 read 方法時,指定每次只讀取固定大小的內容,比如下面的代碼中,每次只讀取 8kb 返回。
def read_from_file(filename, block_size = 1024 * 8): with open(filename, "r") as fp: while True: chunk = fp.read(block_size) if not chunk: break yield chunk
上面的代碼,功能上已經沒有問題了,但是代碼看起來代碼還是有些臃腫。
借助偏函數 和 iter 函數可以優化一下代碼
from functools import partial def read_from_file(filename, block_size = 1024 * 8): with open(filename, "r") as fp: for chunk in iter(partial(fp.read, block_size), ""): yield chunk
關于“python如何流式讀取數G超大文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。