2017-02-16 32 views
0

当我尝试迭代两个目录时,第一个文件数量较少,第二个文件数量较多,我遇到问题: 我想使用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 

这是为什么呢? (我想我必须学习更多关于迭代器......)如果我想使用这个非常大数量的文件不会效率更低?我该如何解决这个问题?

回答

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在内存中的完整列表。