当前位置: 首页 > 面试题库 >

我了解os.walk对吗?

况博容
2023-03-14
问题内容

根目录,目录文件的循环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开始。

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


问题答案:

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


 类似资料:
  • 问题内容: 我一直在阅读,据我所知,我利用网络数据包定时等事件创建了密码随机数。但是,我是否理解使用PRNG并从中植入数字的权利?还是只要有一点就使用它- 当它们用完时会回落到PRNG并从哪里收集种子? 问题答案: 从联机帮助页: 随机数发生器将来自设备驱动程序和其他来源的环境噪声收集到一个熵池中。发生器还保持熵池中噪声位数的估计。根据该熵池,创建随机数。 读取时,/ dev / random设备

  • 问题内容: 我正在练习 自我连接 ,这是我编写查询时不了解的事情。 我有桌子 雇员表包含三个记录。 最后一列manager_id是指使Ahmed和Tove成为Ola经理的第一列ID。 如果我这样写查询 结果使艾哈迈德和托夫经理。然而 正确无误,有人可以解释吗? 问题答案: 自联接就像内部联接,其中同一表的两个或更多实例通过公共数据类型的列/字段联接在一起。这种连接(内部连接)根据连接条件给出公共行

  • 本文向大家介绍你对Mongodb有了解吗?相关面试题,主要包含被问及你对Mongodb有了解吗?时的应答技巧和注意事项,需要的朋友参考一下 mongodb 文档型非关系型数据库 MongoDB 将数据存储在类似 JSON 的灵活文档中,这意味着字段可能因具体文档而异,并且数据结构可能随着时间的推移而变化 文档模型映射到您的应用程序代码中的对象,令数据变得容易运用 即席查询、索引和实时聚合提供了访问

  • 问题内容: 我正在寻找一种与作品一样的非递归步行方式。但是我需要以相同的方式退货。任何想法? 先感谢您。 问题答案:

  • Python3 OS 文件/目录方法 概述 os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下。 在Unix,Windows中有效。 语法 walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 参数 top -- 根目录下的每一个文件夹(包含它自己), 产

  • 问题内容: 恐怕我一定不明白弹性增长。如果您跳到下面的JSFiddle(据我所知),它的大小应该是另一个的三倍。如您所见,事实并非如此。为什么? 问题答案: 您还必须指定一个值(不指定此属性会导致行为类似于使用初始值auto 将其添加到两个孩子中,或仅使用速记进行设置: