使用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 + "----------")
 
  

你可能感兴趣的:(使用python的yield读取大文件的处理方法)