• 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的起始位置开始迭代,前面不满足条件的抛弃掉了
  • 相关阅读:
    C#可视化程序设计第三章(3,4)
    "Can’t be opened because Apple cannot check it for malicious software" 解决方案
    Mac系统.DS_Store文件导致IOError: [Errno 20] Not a directory:解决方案
    读书笔记 《局外人》
    Chrome 67之后无法离线安装插件
    函数和方法的区别
    github|webstorm
    webstorm
    Markdown
    github
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7249215.html
Copyright © 2020-2023  润新知