【发布时间】:2017-07-24 16:47:00
【问题描述】:
考虑这种情况:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
walk = os.walk('/home')
for root, dirs, files in walk:
for pathname in dirs+files:
print os.path.join(root, pathname)
for root, dirs, files in walk:
for pathname in dirs+files:
print os.path.join(root, pathname)
我知道这个例子有点多余,但你应该考虑到我们需要多次使用相同的walk 数据。我有一个基准场景,并且必须使用相同的 walk 数据才能获得有用的结果。
我已经尝试walk2 = walk 在第二次迭代中克隆和使用,但没有成功。问题是......我怎样才能复制它?有可能吗?
提前谢谢你。
【问题讨论】:
-
两次使用
os.walk('/home')有什么问题?这是怎么回事? -
@S.Lott 好吧,这种任务在每次运行时变化很大。另一个问题是,第一次运行后系统可能会缓存结果,所以在下一次运行中我们会得到不精确的结果。这个想法是先走,然后测量两个将其作为参数传递的场景。 :)
-
缓存不会导致错误结果。
-
@pf.me:如果您正在对以下操作进行分析,那么您绝对应该将生成器展开到列表中,以消除目录爬取的变化(请参阅下面的答案)。但是,如果您正在遍历的目录结构非常大,您可能仍然会因为内存分页而发生变化。
-
@pf.me:“我注意到在随后的运行中,我得到了随机的结果,有几秒钟的差异。” “克隆”
os.walk('/home')生成器如何解决这个问题?
标签: python object clone generator