中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用流式讀取大文件

發布時間:2021-05-06 17:27:30 來源:億速云 閱讀:259 作者:Leah 欄目:編程語言

怎么在Python中利用流式讀取大文件?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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中利用流式讀取大文件問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五莲县| 潼关县| 太康县| 嘉义县| 颍上县| 潢川县| 普兰店市| 鄂尔多斯市| 禹城市| 壶关县| 普格县| 榆树市| 平舆县| 娱乐| 玉环县| 宜春市| 桃江县| 河北省| 阿鲁科尔沁旗| 万州区| 康乐县| 朝阳区| 白城市| 肥东县| 滦南县| 黔南| 渝北区| 临颍县| 石楼县| 台南市| 澜沧| 阳春市| 吉安县| 大荔县| 龙南县| 栾城县| 莒南县| 贵南县| 建德市| 松潘县| 乌兰浩特市|