递归目录树python

递归目录树python,python,recursion,os.walk,Python,Recursion,Os.walk,该文件应该映射出该文件所在的文件夹及其所有子目录。出于某种原因,当代码运行其20150迭代时 folder=next(os.walk(os.getcwd()+'/'+文件夹列表[0]))[1] 终止代码,不抛出任何错误。我不知所措。我使用sudo运行代码 我可以在代码中看到两件事: 您在同一次迭代中对生成器调用了两次.next()。我认为这不是您想要做的,您的迭代将解析两个不同的os.walk输出。将os.walk(os.getcwd()).next()的输出保存在var中并使用它 仅当当前级

该文件应该映射出该文件所在的文件夹及其所有子目录。出于某种原因,当代码运行其20150迭代时 folder=next(os.walk(os.getcwd()+'/'+文件夹列表[0]))[1]
终止代码,不抛出任何错误。我不知所措。我使用sudo运行代码

我可以在代码中看到两件事:

  • 您在同一次迭代中对生成器调用了两次
    .next()
    。我认为这不是您想要做的,您的迭代将解析两个不同的
    os.walk
    输出。将
    os.walk(os.getcwd()).next()的输出保存在var中并使用它

  • 仅当当前级别中没有文件夹时,您才处理文件列表,因为您使用的是
    elif
    来执行
    文件列表
    。如果
    ,您应该使用
    ,因为您无论如何都要处理它


此外,请记住,迭代器的末尾会抛出一个
StopIteration
异常,因此很可能发生这种情况。你需要处理这个异常。

你怎么知道的?我使用了print函数来缩小到那行代码。这是Python 2还是Python 3?这个
映射
函数在做什么?什么是
max1
?Python2,max1用于跟踪迭代。映射函数应该映射出一个文件夹和子文件夹,并将所有内容存储在一个列表中。例如,['s3-bucket.py'、'.c9/project.settings'、'.c9/.nakignore'、'bucket/hello world.html'、'bucket/Untitled'、'bucket/README.md'、'.c9/metadata/tab19'、'.c9/metadata/tab20'、'.c9/metadata/tab0'、'.c9/metadata/tab1'、'west/test/stats.py'、'.c9/metadata/workspace/s3 bucket.py']。由于某种原因,当代码经过20150迭代时,代码会终止,不会出现错误。您最后想做什么?我将如何更改代码以处理所有这些问题?我没有收到StopIteration错误,程序只是停止。
def mapping(list_of_files , list_of_folders, max1):
    print max1
    max1 += 1

    if len(list_of_folders) == 0:
        folder = os.walk(os.getcwd()).next()[1]
        files = os.listdir(os.getcwd())
    elif len(list_of_files) != 0:
        print list_of_folders[0]
        ## for some reason this of line of code stops working without error on 20150 iteration 
        folder = next(os.walk(os.getcwd() +'/' + list_of_folders[0]))[1]
        #folder = os.walk(os.getcwd() +'/' + list_of_folders[0] ).next()[1]
        #print os.listdir(os.getcwd() + '/' +list_of_folders[0])
        files = os.listdir(os.getcwd() + '/' +list_of_folders[0])


    length = len(folder)
    length1 = len (files)

    y = 0
    if folder == files:
        del files[:] 
    else :
        for x in range(length):
            while y != length1:
                if files[y] == folder[x]:
                    files.pop(y)
                    length1 = length1 - 1
                    y = 0
                y += 1
            y = 0

    #print folder
    #print files

    if len(list_of_folders) == 0:
        list_of_files = add_to_main_lists(list_of_files,'', files)
        #print list_of_files
        list_of_folders = add_to_main_lists(list_of_folders, '', folder)
        #print list_of_folders
    else:
        list_of_files = add_to_main_lists(list_of_files,list_of_folders[0], files)
        #print list_of_files
        list_of_folders = add_to_main_lists(list_of_folders, list_of_folders[0], folder)
        #print list_of_folders
        list_of_folders.pop(0)


    if len(list_of_folders) == 0:
        print "got to here"
        return  list_of_files 
    else:
        print "file length: " + str(len(list_of_files))
        print "folder length: " + str(len(list_of_folders))
        mapping(list_of_files , list_of_folders, max1)

    return list_of_files

list_of_files = []
list_of_folders = []
list_of_files = mapping(list_of_files, list_of_folders , max1)
print (list_of_files)