# test01_gen.py
# 练习 :文件生成器
# 需求:通过生成器完成以下功能
# 使用函数实现生成器 yield
# 函数接受一个文件对象作为参数(读文件)
# 生成器函数每次返回文件的 10 行数据
# 程序 = 数据结构(列表) + 算法
# 算法:
# 1. 读取文件,按行读(readline, readlines)
# 2. 读一行给列表添加一个元素(行)
# 3. 判断列表长度是否为10
# 是: 通过yield返回列表,清空列表 不是:接着读取文件
# 4. 文件读取完毕,再次判断列表是否为空,如果不为空,将剩余行数返回
def gen_file(fobj): # fobj: 文件管家,形式参数
lines = [] # 每次存储10行记录
for item in fobj.readlines(): # for item in fobj:
lines.append(item) # 读一行给列表添加一个元素
if len(lines) == 10:
yield lines # 通过yield返回列表
lines.clear() # 清空列表
if len(lines) != 0: # 判断列表是否为空
yield lines # 将剩余行数返回
if __name__ == '__main__':
fr = open("/etc/passwd", mode="r")
gen = gen_file(fr) # fobj = fr, gen: 生成器
for item in gen: # 通过for获取生成器中的元素
print(item)
print("============================")
fr.close()