我正在尝试从目录中收集列表中的文件以创建网页链接,但是当“ 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] ==“很多”:'循环多次。我希望它只能循环一次。
答案 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())
感谢所有贡献者!