# 用生成器函数 读取大文件
# 前提: 了解f.read()是一个生成器;
#           生成器yield的执行时机
#           文件很大,而且只有1行时,就不能用f.readline和f.readlines

read, readline, readlines的区别:
https://www.cnblogs.com/hanggegege/p/5926549.html

下面定义一个生成器函数:
def myreadlines(f, newline):
    '''
	f 文件对象
	newline 分隔符
	'''
    buf = ""
	while True:
	    while newline in buf:  # 读取的内容包含了 分隔符
		    pos = buf.index(newline)
			yield buf[:pos]
			buf = buf[pos+len(分隔符):]  # yield出去的数据 要从buf中删除
		chunk = f.read(4096)  # 每次读取4096长度的数据
		
		# 边界条件处理,当读取不到内容的时候,表示文件已经全部读完了
		if not chunk:
		    yield buf
			break
		
		# 将每次读取的内容拼接到 buf字符串中
		buf = buf + chunk
		

with open('testfile.txt') as f:
    for line in myreadlines(f, '分隔符'):
	     print(line)