3-5对迭代器做切片操作

来源:互联网 发布:windows如何禁止更新 编辑:程序博客网 时间:2024/06/03 17:20
# -*- coding:utf-8 -*-"""实际案例:有某个文本文件,我们想读取其中某范围的内容如100~300行之间的内容,python中文本文件是可迭代对象,我们是否可以使用类似列表切片方式得到一个100~300行内容的生成器?f = open('/var/log/dmesg')f[100:300]     # OK?解决方案:使用标准库中的itertools.islice,它能返回一个迭代对象切片的生成器."""from itertools import islicef = open('/var/log/dpkg.log')# cut_f = f[100:300]           # 会报错,不允许ls_lines = f.readlines()cut_lines = ls_lines[100:300]# 缺点就是:readlines会把整个文件导入到内存当中,文件过大时会出现内存不足for line in f:    print(line)# 现在调用不会出现任何输出结果,因为上述操作已经把文件指针移动到了文件最后f.seek(0)# for line in f:#     print(line)      # 现在会有结果出来for line in islice(f, 100, 300):    print(line)# islice(f, 500)        # 描述前500行# islice(f, 100, None)  # 100~endls = range(20)t = iter(ls)          # 生成ls的迭代器for x in islice(t, 5, 10):   # 记着每次使用islice时,要重新申请一个可迭代对象,它会消耗这个迭代对象的资源    print(x)# 5# 6# 7# 8# 9for x in t:    print(x)         # 因为t已经迭代到10那个位置# 10# 11# 12# 13# 14# 15# 16# 17# 18# 19
0 0
原创粉丝点击