您好,登錄后才能下訂單哦!
怎么在Python中利用流式讀取大文件?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
1、使用 read 方法分塊讀取
使用更底層的file.read()方法,與直接循環迭代文件對象不同,每次調用file.read(chunk_size)會直接返回從當前位置往后讀取 chunk_size 大小的文件內容,不必等待任何換行符出現。
def count_nine_v2(fname): """計算文件里包含多少個數字 '9',每次讀取 8kb """ count = 0 block_size = 1024 * 8 with open(fname) as fp: while True: chunk = fp.read(block_size) # 當文件沒有更多內容時,read 調用將會返回空字符串 '' if not chunk: break count += chunk.count('9') return count
2、利用生成器解耦代碼
可以定義一個新的chunked_file_reader生成器函數,由它來負責所有與“數據生成”相關的邏輯。
count_nine_v3里面的主循環就只需要負責計數即可。
def chunked_file_reader(fp, block_size=1024 * 8): """生成器函數:分塊讀取文件內容 """ while True: chunk = fp.read(block_size) # 當文件沒有更多內容時,read 調用將會返回空字符串 '' if not chunk: break yield chunk def count_nine_v3(fname): count = 0 with open(fname) as fp: for chunk in chunked_file_reader(fp): count += chunk.count('9') return count
使用 iter(callable,sentinel) 的方式調用它時,會返回一個特殊的對象,迭代它將不斷產生可調用對象 callable 的調用結果,直到結果為 setinel 時,迭代終止。
def chunked_file_reader(file, block_size=1024 * 8): """生成器函數:分塊讀取文件內容,使用 iter 函數 """ # 首先使用 partial(fp.read, block_size) 構造一個新的無需參數的函數 # 循環將不斷返回 fp.read(block_size) 調用結果,直到其為 '' 時終止 for chunk in iter(partial(file.read, block_size), ''): yield chunk
關于怎么在Python中利用流式讀取大文件問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。