迭代两个目录

时间:2017-02-16 14:24:14

标签: python glob

当我尝试迭代两个目录时,第一个文件数量较少,第二个文件数量较多,我遇到了一个问题: 我想将iglob用于大量文件,但这不起作用。

large_n_files = glob.iglob(pathtodir)
small_n_files = glob.iglob(pathtootherdir)

for s in small_n_files:
    for l in large_n_files:
        print(l,s)

产量(假设例如small_n = 2,large_n = 3)

l1 s1
l2 s1
l3 s1

当我切换到glob以获取large_n_files时,我得到了我想要的结果,即

large_n_files = glob.glob(pathtodir)
small_n_files = glob.iglob(pathtootherdir)

for s in small_n_files:
    for l in large_n_files:
        print(l,s)

产量

l1 s1
l2 s1
l3 s1
l1 s2
l2 s2
l3 s2

为什么会这样? (我想我必须学习更多关于迭代器的信息......)如果我想将这个用于大量文件,那么整体效率会不高吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当你这样做时:

small_n_files = glob.iglob(pathtootherdir)

你回到迭代器中;这意味着你只能迭代一次。

另一方面,

large_n_files = glob.glob(pathtodir)

然后您创建一个列表,您可以多次迭代。 (它为每个small_n_files循环创建一个迭代器对象)。但你在内存中有完整的清单。

如果您不想将large_n_files保存在内存中(因为它很大),您可以使用以下代码:

small_n_files = glob.iglob(pathtootherdir)

    for s in small_n_files:
        for l in glob.iglob(pathtodir):
            print(l,s)

这样你就永远不会在内存中找到完整的pathtodir列表。