当文件读取结束后,抛出StopIteration异常,因此这里通过捕获异常判断文件是否读取完成。
参考案例:文件读取和写入
# -*- coding: utf-8 -*-
import os
def Myf1():
i = 0
with open('myfile.txt', 'r', encoding='utf-8') as f:
line = f.readline()
while line:
i += 1
yield line
print('*' * (i * 10))
line = f.readline()
def writeFile(myfile1):
linenum = 0
if os.path.exists(myfile1):
os.remove(myfile1)
f1 = Myf1()
try:
line = next(f1)
while line:
linenum += 1
print(line.strip())
with open(myfile1, 'a', encoding='utf-8') as f:
f.write(line)
line = next(f1)
except StopIteration:
print('The number of lines in the file is: %s' % linenum)
print('File reading completed.')
if __name__ == '__main__':
myfile1 = r'D:\tempcmd\Study0602\myfile1.txt'
writeFile(myfile1)
执行结果如下:
E:\VEnv\Spider01\venv\Scripts\python.exe D:/tempcmd/Study0602/myf2.py
hello world haha
**********
you are a pig
********************
******************************
****************************************
go away.程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)
**************************************************
let is go lala la!
************************************************************
**********************************************************************
The number of lines in the file is: 7
File reading completed.