我了解os.walk对吗?

发布于 2021-01-29 19:12:50

根目录,目录文件的循环os.walk(startdir)通过以下步骤进行?

for root in os.walk(startdir) 
    for dir in root 
        for files in dir
  1. 获取开始目录的根目录:C:\ dir1 \ dir2 \ startdir

  2. 在C:\ dir1 \ dir2 \ startdir中获取文件夹,并返回文件夹“ dirlist”的列表

  3. 获取第一个目录列表项中的文件,并返回文件“ filelist”列表作为文件列表列表的第一项。

  4. 移至目录列表的第二项,并将此文件夹“ filelist2”中的文件列表作为文件列表的第二项返回。等等

  5. 移动到foldertree中的下一个根目录并从2开始。

对?还是只是先获得所有根,然后才获得所有目录,然后再得到所有文件?

关注者
0
被浏览
147
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    os.walk 返回一个生成器,该生成器创建一个值元组(current_path,current_path中的目录,current_path中的文件)。

    每次调用生成器时,它将递归地跟踪每个目录,直到从调用walk的初始目录中没有其他子目录可用为止。

    因此,

    os.walk('C:\dir1\dir2\startdir').next()[0] # returns 'C:\dir1\dir2\startdir'
    os.walk('C:\dir1\dir2\startdir').next()[1] # returns all the dirs in 'C:\dir1\dir2\startdir'
    os.walk('C:\dir1\dir2\startdir').next()[2] # returns all the files in 'C:\dir1\dir2\startdir'
    

    所以

    import os.path
    ....
    for path, directories, files in os.walk('C:\dir1\dir2\startdir'):
         if file in files:
              print('found %s' % os.path.join(path, file))
    

    或这个

    def search_file(directory = None, file = None):
        assert os.path.isdir(directory)
        for cur_path, directories, files in os.walk(directory):
            if file in files:
                return os.path.join(directory, cur_path, file)
        return None
    

    或者,如果您要查找文件,可以执行以下操作:

    import os
    def search_file(directory = None, file = None):
        assert os.path.isdir(directory)
        current_path, directories, files = os.walk(directory).next()
        if file in files:
            return os.path.join(directory, file)
        elif directories == '':
            return None
        else:
            for new_directory in directories:
                result = search_file(directory = os.path.join(directory, new_directory), file = file)
                if result:
                    return result
            return None
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看