标准库中的itertools.islice,它能返回一个迭代对象切片的生成器
使用方式:
islice(iterable, stop) --> islice object
islice(iterable, start, stop[, step]) --> islice object
支持2,3,4个参数,不支持负索引
islice(iterable, stop) --> islice object
islice(iterable, start, stop[, step]) --> islice object
|
| Return an iterator whose next() method returns selected values from an
| iterable. If start is specified, will skip all preceding elements;
| otherwise, start defaults to zero. Step defaults to one. If
| specified as another value, step determines how many values are
| skipped between successive calls. Works like a slice() on a list
| but returns an iterator.
注意:islice会消耗原迭代器对象
from itertools import islice
i = iter(range(10))
s = islice(i,3,6) # 3-6,步长默认为1
for x in s:
print(x) # 3,4,5
print("------")
for y in i:
print(y) # 输出被消耗后的结果:6,7,8,9
实际案列:
有某个文本文件,我们想读取其中某范围的内容,如100-300行的内容。
python中的文本文件是可迭代对象,我们是否可以使用类似列表切片的方式
得到一个包含100-300行内容的生成器?
例如:
f = open('./a.txt')
f[100:300]
from itertools import islice
f = open("../static/风衣",encoding="utf-8")
s = islice(f,1,5) # 1-5行内容,步长为1
for line in s:
print(line.strip())
print('----------------')
s = islice(f,3) # 1-3行内容,步长为1
for line in s:
print(line.strip())
print('----------------')
s = islice(f,10,None,2) # 10-末尾行内容,步长为2
for line in s:
print(line.strip())