os.walk for loop每次迭代都执行代码,我在做什么错?

时间:2019-05-22 19:57:25

标签: python iteration os.walk

我正在尝试从目录中收集列表中的文件以创建网页链接,但是当“ for”循环完成时,它将在每次迭代时执行append函数。因此,我要获得相同的数据三倍,我在猜测循环的每个部分(根,子目录和文件)迭代。我在做错什么,或者应该怎么做呢?

我很确定我以前曾经运行过这段代码或类似的代码,并且没有数据重复三次,所以我对现在为什么这样做感到困惑。


    try:
        for root, subdir, files in os.walk(rootdir):
               for file in files:
                  drive, path_and_file = os.path.splitdrive(root)
                  parts = path_and_file.split("\\")
                  if parts[2] == "Lots":
                     lotPart = [parts[1], parts[2], parts[3], file]
                     iniLotParts.append(lotPart)

         gatherLots(iniLotParts)

    except Exception as e:
       print("type error: for gather data " + str(e))
       print(traceback.format_exc())

似乎正在经历我的'if parts [2] ==“很多”:'循环多次。我希望它只能循环一次。

1 个答案:

答案 0 :(得分:0)

好的,我知道了!事实证明,我并没有退出来了解如何在os.walk中使用“ for”循环。我认为它对于循环的所有元素(即root,subdir和文件)都停留在循环中。因此,我将自己的物品收集在列表中,然后当我认为已收集所有物品时,在循环的一边进行了函数调用。我发现,该函数调用是在每次循环访问某个元素(尤其是每个子目录)时进行的。因此,我根据收到的一些反馈对代码进行了一些修改,并将函数调用更适当地放置在for循环中。我还为需要收集的其他文档添加了一个附加部分。我最终得到的结果如下:

def gatherData(rootdir):
    try:
        r=[]
        subdirs = [x[0] for x in os.walk(rootdir)]

        for subdir in subdirs:
            iniLotParts = []
            iniSecParts = []
            iniMuniParts = []
            drive, path_and_file = os.path.splitdrive(subdir)
            parts = path_and_file.split("\\")
            files = os.walk(subdir).next()[2]
            if (len(parts) == 4):
                if parts[2] == "Lots":                    
                    for file in files:
                        lotPart = [parts[1], parts[2], parts[3], file]
                        iniLotParts.append(lotPart)
                    gatherLots(iniLotParts)
                if parts[2] == "Section":
                    for file in files:
                        secPart = [parts[1], parts[2], parts[3], file]
                        iniSecParts.append(secPart)
                    gatherSecs(iniSecParts) 
    except Exception as e:
        print("type error: for gather data " + str(e))
        print(traceback.format_exc())

感谢所有贡献者!