【问题标题】:Adding elements to python generators将元素添加到 python 生成器
【发布时间】:2010-10-08 23:34:03
【问题描述】:

是否可以将元素附加到 python 生成器?

我目前正在尝试从一组杂乱无章的文件夹中获取所有图像并将它们写入新目录。为了获取文件,我使用 os.walk() 来返回单个目录中的图像文件列表。虽然我可以从这个单一列表中创建一个生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。任何帮助将不胜感激。

相关:

【问题讨论】:

    标签: python append generator


    【解决方案1】:
    def files_gen(topdir='.'):
        for root, dirs, files in os.walk(topdir):
            # ... do some stuff with files
            for f in files:
                yield os.path.join(root, f)
            # ... do other stuff
    
    for f in files_gen():
        print f
    

    【讨论】:

      【解决方案2】:

      像这样。

      def threeGens( i, j, k ):
          for x in range(i):
             yield x
          for x in range(j):
             yield x
          for x in range(k):
             yield x
      

      效果很好。

      【讨论】:

      • itertools.chain(range(i), range(j), range(k))
      • @J.F. Sebastian:范围为 os.walk(...) 时不会。
      【解决方案3】:

      您正在寻找itertools.chain。它将多个可迭代对象组合成一个,如下所示:

      >>> import itertools 
      >>> for i in itertools.chain([1,2,3], [4,5,6]):
      ...     print(i)
      ... 
      1
      2
      3
      4
      5
      6
      

      【讨论】:

      • 你如何在os.walk的上下文中使用chain
      • @J.F.Sebastian: chain(os.walk("."), other_generator).
      【解决方案4】:

      应该这样做,directories 是您的目录列表:

      import os
      import itertools
      
      generators = [os.walk(d) for d in directories]
      for root, dirs, files in itertools.chain(*generators):
          print root, dirs, files
      

      【讨论】:

      • chain.from_iterable(imap(os.walk, directories))
      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多