Python-对迭代器进行切片操作-itertools模块
案例:
对于某个文件,我只想读取到其中100~200行之间的内容,是否可以通过切片的方式进行读取?
我想:
f = open() f[100:200]
可行?
如何解决这个问题?
方法1:
全部读取到内存中来
f = open()
f_all = f.readlines()
for i in f_all[100:200]:
print(i)
# 出现问题,假如文件有20多G,那内存不够
方法2:
把这个文件变成可迭代对象,通过 itertools 中 islice 方法
f = open()
f_need = islice(f, 100, 200)
for i in f_need:
print(i)
解决该问题的思路
#!/usr/bin/python3
from itertools import islice
# 生成 1~20 的可迭代对象
l = range(20)
# ~5,不包括5
for i in islice(l, 5):
print(i)
print("_"*30)
# 5~10,不包括10
for i in islice(l, 5, 10):
print(i)
print("_"*30)
# 5~最后
for i in islice(l, 5, None):
print(i)
print("_"*30)
# t对象,迭代会消耗t对象的生成器
t = iter(l)
for i in islice(t, 5, 10):
print(i)
print("_"*30)
# 再次对t迭代,会从10开始
for x in t:
print(x)
# 解释
# islice(可迭代对象, start, end),顾头不顾尾,
# 只取前5行数据 islice(f, 5)
# 只取5行以后的数据islice(f, 5,None)
# 不支持负数引索,每次迭代,消耗掉内部f生成器
# 本质上是从f的起始位置开始迭代,前面不满足条件的抛弃掉了

浙公网安备 33010602011771号