Python 读取文件的几个函数以及大文件读写

read() 函数一次性读取整个文件,如果是大文件通常反复调用 read(size) 比较保险,每次读取 size 个字节。

另外 readline 每次读取一行内容,而 readlines 一次性读取所有行并返回一个 list

读取大文件的一个封装

def read_in_chunks(filePath, chunk_size):
    file_object = open(filePath)
    while True:
        chunk_data = file_object.read(chunk_size)
        if not chunk_data:
            break
        yield chunk_data
        
if __name__ == "__main__":
    filePath = './path/filename'
    for chunk in read_in_chunks(filePath):
        pass

另外 也可以通过 iter 和 partial 更简单的实现这一功能

from functools import partial

def readanddraw():
    with open(filePath) as f:
        chunks = iter(partial(f.read, chunksize), '')
        for chunk in chunks:
            pass

iter() 函数有一个鲜为人知的特性就是,如果你给它传递一个可调用对象和一个 标记值,它会创建一个迭代器。这个迭代器会一直调用传入的可调用对象直到它返回标 记值为止,这时候迭代终止。

综上,对于大文件,要么 readline 要么 按固定大小读取文件。