使用python的yield读取大文件的处理方法

 在python中 比如读取一个500G文件大小,如果使用readLines()方法和read()方法都是不可取的这样的话,直接会导致内存溢出,比较好的方法是使用read(limitSize)或  readLine(limitSize)方法读取数据,每次读取指定字节的数据,放置内存中,在配合

# coding=gbk
#readLine
def readContent(fileObj, lineSign):
    buf = ""
    while True:
        lines = buf.split(";")
        for line in lines:
            # 每获得一个数据就进行返回,直到所有数据遍历完为止
            yield line
        # 每一行读取400字节的数据,下次会在下一行读取400字节的数据
        # 每次读取400字节在内存中,并处理之后返回
        chunk = fileObj.readline(400)
        if not chunk:
            buf = ""
            yield buf
            break
        buf = chunk

#read
def readContent2(fileObj, lineSign):
    buf = ""
    while True:
        while lineSign in buf:
            pos = buf.index(lineSign)
            yield buf[:pos]
            buf = buf[pos + len(lineSign):]
        # 每一行读取400字节的数据,下次会在下一行读取400字节的数据
        # 每次读取400字节在内存中,并处理之后返回
        chunk = fileObj.read(100)
        if not chunk:
            buf = ""
            yield buf
            break
        buf += chunk


if __name__ == "__main__":
    with open("text.txt") as f:
        for line in readContent2(f, ";"):
            print(line + "----------")
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值