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

2024-09-30 14:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试遍历两个目录时,第一个目录的文件数较少,第二个目录的文件数较多,我遇到了一个问题: 我想用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)

收益率(假设小的_n=2,大的_n=3)

^{pr2}$

当我切换到glob来处理大文件时,我得到了我想要的结果,即

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的效率不会降低吗?我该怎么办?在


Tags: 文件in目录forfilesglobsmalllarge
1条回答
网友
1楼 · 发布于 2024-09-30 14:21:16

当您这样做时:

small_n_files = glob.iglob(pathtootherdir)

返回迭代器;这意味着您只能迭代一次。在

另一方面,当你这样做时:

^{pr2}$

然后创建一个列表,可以重复多次。(它为每个小文件循环创建一个迭代器对象)。但你的记忆里有完整的名单。在

如果您不想在内存中保存大的\u\u文件(因为它太大),可以使用以下代码:

small_n_files = glob.iglob(pathtootherdir)

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

这样你就永远不会有完整的路径列表在内存中。在

相关问题 更多 >