如何向Python生成器中追加元素?
我目前正在尝试从一组杂乱的文件夹中获取所有图像,并将它们写入新目录。为了获取这些文件,我使用os.walk()函数返回单个目录中的图像文件列表。虽然我可以将此单个列表转换为生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。非常感谢您的帮助。
相关资料:
如何向Python生成器中追加元素?
我目前正在尝试从一组杂乱的文件夹中获取所有图像,并将它们写入新目录。为了获取这些文件,我使用os.walk()函数返回单个目录中的图像文件列表。虽然我可以将此单个列表转换为生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。非常感谢您的帮助。
相关资料:
你正在寻找itertools.chain
。它会将多个可迭代对象合并为一个,就像这样:
>>> import itertools
>>> for i in itertools.chain([1,2,3], [4,5,6]):
... print(i)
...
1
2
3
4
5
6
这应该就可以了,其中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))
翻译为:将 directories
中的目录递归遍历,返回所有文件路径的迭代器。 - jfsdef 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
像这样。
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))
- jfs
os.walk
的上下文中,如何使用chain
? - jfschain(os.walk("."), other_generator)
. @J.F.Sebastian:chain(os.walk("."), other_generator)
。 - sshine