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__()方法就生成一个迭代器。即是一个迭代对象

posted @ 2020-02-25 22:23  竹石2020  阅读(483)  评论(0编辑  收藏  举报