本文介绍了我了解os.walk对吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

os.walk(startdir)中的root,dir,file循环执行以下步骤吗?

The loop for root, dir, file in os.walk(startdir) works through these steps?

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

  1. get root of start dir : C:\dir1\dir2\startdir

在C:\ dir1 \ dir2 \ startdir中获取文件夹并返回文件夹"dirlist"列表

get folders in C:\dir1\dir2\startdir and return list of folders "dirlist"

在第一个目录列表项中获取文件,并将文件"filelist"的列表作为文件列表列表的第一项返回.

get files in first dirlist item and return list of files "filelist" as the first item of a list of filelists.

移动到目录列表中的第二项,并将此文件夹"filelist2"中的文件列表作为文件列表列表的第二项返回.等等.

move to second item in dirlist and return list of files in this folder "filelist2" as the second item of a list of filelists. etc.

移动到Foldertree中的下一个根目录并从2开始.等等.

move to next root in foldertree and start from 2. etc.

对吗?还是首先获取所有根目录,然后获取所有目录目录,然后获取所有文件目录?

Right? Or does it just get all roots first, then all dirs second and all files third?

推荐答案

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

os.walk returns a generator, that creates a tuple of values (current_path, directories in current_path, files in current_path).

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

Every time the generator is called it will follow each directory recursively until no further sub-directories are available from the initial directory that walk was called upon.

就这样

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

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

or if you want to look for file you can do this:

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

这篇关于我了解os.walk对吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 17:34