Python-对迭代器进行切片操作-itertools模块
2024-10-09 17:35:09
案例:
对于某个文件,我只想读取到其中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的起始位置开始迭代,前面不满足条件的抛弃掉了
最新文章
- 韩国";被申遗"; (转自果壳)
- MVC配置ckeditor+ckfinder
- jquery.validate:
- Java Web学习系列——创建基于Maven的Web项目
- ODB学习笔记之基础环境搭建
- C++中 :: 的意思
- 【转】Linux下创建、销毁、使用 SWAP
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
- SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-007-表单验证@Valid、Error
- form不提交问题
- 转:drupal使用superfish建立下拉菜单
- js字符串转换为数字 总结
- 201521123037 《Java程序设计》第3周学习总结
- [物理学与PDEs]第3章习题7 快、慢及Alfv\'en 特征速度的比较
- jira7通过全局js给编辑区自定义快捷键【原】
- SpringBoot介绍
- Oracle Database 12c Release 2安装过程实录
- (转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署
- Python巧用正则表达式,完成接口参数替换
- 从零开始编写操作系统——bochs