zoukankan      html  css  js  c++  java
  • 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的起始位置开始迭代,前面不满足条件的抛弃掉了
  • 相关阅读:
    MyString
    Django疑难问题
    mysql 疑难问题-django
    python时间转换 ticks-FYI
    django建议入门-FYI
    Python风格规范-FYI
    scrum敏捷开发☞
    git基本命令
    centos下的安装mysql,jdk
    memcached for .net on windows
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7249215.html
Copyright © 2011-2022 走看看