我是python的新手,我对for循环的理解是它们的工作方式与C语言不同,这意味着您不能通过从范围变量中减去1来返回一次迭代。但是,有没有一种容易实现的方法可以返回迭代?
for循环定义为:
for root, dirs, files in os.walk(path):
我希望如果发生某个事件,我可以返回并重新检查当前文件夹及其中的所有文件/文件夹。然后继续。
请提出建设性批评意见以改善问题。
答案 0 :(得分:1)
将路径遍历结果存储在列表中:
walk_list=[]
for root, dirs, files in os.walk(path):
walk_list.append((root,dirs,files))
然后编写自己的循环,以遍历walk_list 带有索引号,一旦要返回,请减去索引号。
答案 1 :(得分:1)
在触发条件的情况下使用内部循环。此内部循环将重做触发文件的所有已处理的同级,然后返回到常规检查。
for root, dirs, files in os.walk(path):
if triggered:
parent = os.path.dirname(root)
# Recheck all files and folders already checked before
# bumping into the current file
for redo_root, redo_dirs, redo_files in os.walk(parent):
if redo_root == root:
break # "And then continue onwards"
DO_STUFF(redo_root, redo_dirs, redo_files)
DO_STUFF(root, dirs, files)
答案 2 :(得分:1)
如果您只需要先行步骤(即n-1)中的值,则可以将它们简单地分配给某些变量(prevRoot,prevDirs,prevFiles),然后再重写它们。根据您写的内容,我假设您不需要将所有以前的结果存储在列表中。
在这种情况下,您可以尝试以下操作:
import os
dir = 'c:\\'
for n, (root, dirs, files) in enumerate(os.walk(dir)):
if n == 0:
prevRoot = root
prevDirs = dirs
prevFiles = files
print n
print (root, dirs, files)
print (prevRoot, prevDirs, prevFiles)
#DO YOUR STUFF HERE
if n > 0:
prevRoot = root
prevDirs = dirs
prevFiles = files