案例:

对于某个文件,我只想读取到其中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的起始位置开始迭代,前面不满足条件的抛弃掉了

最新文章

  1. 韩国"被申遗" (转自果壳)
  2. MVC配置ckeditor+ckfinder
  3. jquery.validate:
  4. Java Web学习系列——创建基于Maven的Web项目
  5. ODB学习笔记之基础环境搭建
  6. C++中 :: 的意思
  7. 【转】Linux下创建、销毁、使用 SWAP
  8. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
  9. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-007-表单验证@Valid、Error
  10. form不提交问题
  11. 转:drupal使用superfish建立下拉菜单
  12. js字符串转换为数字 总结
  13. 201521123037 《Java程序设计》第3周学习总结
  14. [物理学与PDEs]第3章习题7 快、慢及Alfv\'en 特征速度的比较
  15. jira7通过全局js给编辑区自定义快捷键【原】
  16. SpringBoot介绍
  17. Oracle Database 12c Release 2安装过程实录
  18. (转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署
  19. Python巧用正则表达式,完成接口参数替换
  20. 从零开始编写操作系统——bochs

热门文章

  1. WebApis中BOM的学习
  2. GeneralUpdate2.1.0发布
  3. 力扣Leetcode 面试题51. 数组中的逆序对 - 归并排序
  4. vue+elementUI+vue-i18n 实现国际化
  5. 常用API【2】
  6. 使用grep命令查找文件中符合”.stg.“行
  7. 一句Delete..In.. 删除语句的优化
  8. docker 修改容器配置文件
  9. 原生JDK网络编程- Buffer
  10. Java模拟实现扫雷功能