py编程技巧-2.4-如何对迭代器做切片操作实现对于文本的切片操作?

实际案例

有某个人文本文件,我们想读取某范围的内容:如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, 3):
    print line
# 打印前3行
for line in islice(f, 3):
    print line
# 打印1到结尾
for line in islice(f, 1, None):
    print line
# 负不支持
# for line in islice(f, 1, -1):
#   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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏二进制文集

Java 代码模拟死锁

983
来自专栏企鹅号快讯

python学习爬虫获取糗事百科段子

利用前面学到的文件、正则表达式、urllib的知识,综合运用,爬取糗事百科的段子 先用urllib库获取糗事百科热帖第一页的数据。并打开文件进行保存,正好可以熟...

2145
来自专栏漫漫深度学习路

tensorflow:上下文管理器 与 name_scope, variable_scope

tensorflow的上下文管理器,详解name_scope和variable_scope with block 与上下文管理器 上下文管理器:意思就是,在这个...

3406
来自专栏swag code

XML文档树形结构图解

  3)<book>节点下有许多的子节点<title>、< author>、<year>、<price>

943
来自专栏安恒网络空间安全讲武堂

Python编写渗透工具学习笔记一 | 0x08字典生成程序

0x08字典生成程序 这里主要用到了exrex模块,这个模块的主要功能是: 生成所有匹配的字符串 生成随机匹配的字符串 计算匹配字符串的数量 简化正则表达式 这...

2929
来自专栏大数据架构师专家

python异常处理

异常处理是工作中编写代码必须要完成的内容,对于不符合预期的用户操作或数据输入,程序总会出现异常情况,而对异常情况能够妥善处理,是保证程序稳定性的关键工作...

1222
来自专栏程序员同行者

python collections,函数等笔记

1034
来自专栏LinkedBear的个人空间

唠唠SE的多线程-01——线程 原

2.如果线程对象直接调用run(),那么JVN不会当作线程来运行,会认为是普通的方法调用。

813
来自专栏我是攻城师

如何证明Java多线程中的成员变量的值是互不可见的

前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义,特点和联系,其中在Java多线程里面有一个数据不可见的问题而我们知道使用volatile可以解决,...

1464
来自专栏程序员互动联盟

【编程基础】你是否真的了解main()函数?

最近看到很多人、甚至市面上的一些书籍,都使用了void main() ,其实这是错误的。C/C++中从来没有定义过void main() 。C++之父 Bjar...

3316

扫码关注云+社区

领取腾讯云代金券