第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

python 讀取大文件

標(biāo)簽:
Python

    readlines、read()、readline()等一次性读取遇到很大的文件都可能面临内存崩溃,所以我们将读取操作细化一点

1. read(size) + yield

固定每次读取的长度,使用生成器返回

def read_file1(file='articles.txt'):
    time.sleep(1)
    block_size = 1024
    with open(file, 'r', encoding='utf-8') as f:
        while True:
            block = f.read(block_size)
            if block:
                yield block
            else:
                break

2. for line in

    迭代遍历,这个方法会自动地使用缓冲IO(buffered IO)以及内存管理,但是如果大量数据都在一行还是会出状况

def read_file2(file='articles.txt'):
    with open(file, 'r', encoding='utf-8') as f:
        for line in f:
            print(line)

3. buff机制

    对于所有数据都在一行的话,用for line in不仅仅没法处理而且获取数据的时候也没法获取到有效内容,这一行数据里明显会包含换行符、分隔符等,这个时候我们就可以自建一个buff管理来处理数据了,将每一次读取的内容加入缓存,对分隔符做处理后下次就从这之后依次处理

def read_file3(split_str, size, file='articles.txt', ):
    with open(file, 'r', encoding='utf-8') as f:
        buff = ""                                                   #定义缓冲区
        while True:
            print("buff:", buff)
            while split_str in buff:                                #若分隔符在缓冲区内
                print("捕捉到分隔符", buff)
                position = buff.index(split_str)                    #查找分隔符第一次出现的索引
                yield buff[:position]                               #返回从初始索引到次索引之间的缓冲区内容
                buff = buff[position + len(split_str):]              #更新缓冲区,除去分隔符以及之前的内容
            chunk = f.read(size)                                    #缓冲区内无分隔符则读取size个字符
            if chunk:                                               #读取到内容,将内容添加到缓冲区
                buff += chunk
            else:
                yield buff                                          #没读取到内容,退出循环
                break

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消