如何对迭代器做切片操作实现对于文本的切片操作

问题
有某个人文本文件,我们想读取某范围的内容:如100-300行之间的内容
,python中文本文件是一个可迭代对象,我们是否可以使用类似于列表切片
的方式得到一个100 - 300 行文件内容的生成器?

f = open('/var/mtianyan.txt')
f[100:300] #可以吗?

普通做法:

f = open('guess.py')
# 'file' object has no attribute '__getitem__'
f[1:8]
print dir(f)


lines = f.readlines()

print lines[1:3]

# 使用seek操作使读取文件的游标返回到头部
f.seek(0)
for line in f:
    print line

高级做法:

from itertools import islice

# print help(islice)

# islice(iterable, [start,] stop [, step])
# 
f = open('guess.py')
print islice(f, 1, 3)

# 打印一行到三百行
for line in islice(f, 1, 300):
    print line
# 打印前三百行
for line in islice(f, 300):
    print line
# 打印100到结尾
for line in islice(f, 100, None):
    print line

l = range(20)
print l

t = iter(l)

for x in islice(t,5,10):
    print x
print '*'*20
# 它会消耗迭代器对象,因此下面的for循环会从10开始
for x in t:
    print x

你可能感兴趣的:(如何对迭代器做切片操作实现对于文本的切片操作)