迭代两个目录时的 python glob 和 iglob

标签 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

为什么会这样呢? (我想我必须了解更多关于迭代器的知识......)如果我想将其用于大量文件,glob 的效率是否会降低?我该如何解决这个问题?

最佳答案

当你这样做时:

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的完整列表。

关于迭代两个目录时的 python glob 和 iglob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42276625/

相关文章:

python - Mongoengine 列表过滤

java - 有什么办法可以在后台运行Python模型吗?

regex - 有邪恶的球体吗?

javascript - firebase云函数部署glob错误

python - Pandas 添加文件创建日期作为变量

python - 从另一个文件导入函数本身导入不可用的模块?

python - Pandas 日期时间索引

java - 生成器是否不如 "real"协程?

python - 在python中搜索具有相同文件名的所有文件的最有效方法

Python argv 采用通配符路径