python对文件中光标的操作迭代器
seek() 默认从文件开头开始。seek(10)
seek(10,1) 需要以b的模式读取文件,从相对位置进行移动光标
seek(-3,2) 倒着移动光标的模式 例如:
1 f= open('aaa','rb') 2 f.seek(-3,2) 3 data = f.read() 4 print(f.tell()) 5 print(data) 6 输出: 7 18 8 b'123'
循环文件的方式 为了避免内存的浪费使用
f = open('aaa','r') 使用循环 for i in f: 一次取一个,不会造成内存的浪费
大文件快速找到最后一行,例如:
1 f = open('aaa','rb') 2 for i in f: 3 seek_num = -3 4 while True: 5 f.seek(seek_num,2) 6 data = f.readlines() 7 if len(data) > 1: 8 print('最后一行是%s'%(data[-1].decode('gbk'))) 9 break 10 seek_num *=2 11 输出: 12 最后一行是2020/2/24 aaa 干了一件事
迭代器对象生成。例如:
1 f = open('aaa','r',encoding='gbk') 2 f_list = f.__iter__() 3 print(f_list.__next__(),end='') 4 print(f_list.__next__(),end='') 5 print(f_list.__next__(),end='') 6 print(f_list.__next__(),end='') 7 输出: 8 2020/2/20 alex 干了一件事 9 2020/2/21 alex 干了一件事 10 2020/2/22 alex 干了一件事 11 2020/2/23 alex 干了一件事
print(next(f_list)) next() 方法相当于调用f_list.__next__() 方法
#####调用__iter__()方法就生成一个迭代器。即是一个迭代对象