栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中获取所有直接子目录

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中获取所有直接子目录

我对各种功能进行了 速度测试 ,以将 完整路径 返回到所有当前子目录。

tl; dr: 始终使用

scandir

list_subfolders_with_paths = [f.path for f in os.scandir(path) iff.is_dir()]

奖励:使用,

scandir
您也可以只使用
f.name
而不是来获取文件夹名称
f.path

该函数(以及下面的所有其他函数)将不会使用 自然排序
。这意味着将对结果进行如下排序:1、10、2。要进行自然排序(1、2、10),请查看http://codingdict.com/questions/169984


结果

scandir
是:比
walk
快3倍,比
listdir
(带过滤器)快32倍,比
Pathlib
listdir
35倍,快36倍,比快37倍(!)
glob

Scandir:0.977Walk:   3.011Listdir (filter): 31.288Pathlib:          34.075Listdir:          35.501Glob:  36.277

已在W7x64,Python 3.8.1中测试。带有440个子文件夹的文件夹。
如果您想知道是否

listdir
可以通过不两次执行os.path.join()来加快速度,是的,但是这种区别基本上是不存在的。

码:

import osimport pathlibimport timeitimport globpath = r"<example_path>"def a():    list_subfolders_with_paths = [f.path for f in os.scandir(path) if f.is_dir()]    # print(len(list_subfolders_with_paths))def b():    list_subfolders_with_paths = [os.path.join(path, f) for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))]    # print(len(list_subfolders_with_paths))def c():    list_subfolders_with_paths = []    for root, dirs, files in os.walk(path):        for dir in dirs: list_subfolders_with_paths.append( os.path.join(root, dir) )        break    # print(len(list_subfolders_with_paths))def d():    list_subfolders_with_paths = glob.glob(path + '/*/')    # print(len(list_subfolders_with_paths))def e():    list_subfolders_with_paths = list(filter(os.path.isdir, [os.path.join(path, f) for f in os.listdir(path)]))    # print(len(list(list_subfolders_with_paths)))def f():    p = pathlib.Path(path)    list_subfolders_with_paths = [x for x in p.iterdir() if x.is_dir()]    # print(len(list_subfolders_with_paths))print(f"Scandir:          {timeit.timeit(a, number=1000):.3f}")print(f"Listdir:          {timeit.timeit(b, number=1000):.3f}")print(f"Walk:  {timeit.timeit(c, number=1000):.3f}")print(f"Glob:  {timeit.timeit(d, number=1000):.3f}")print(f"Listdir (filter): {timeit.timeit(e, number=1000):.3f}")print(f"Pathlib:          {timeit.timeit(f, number=1000):.3f}")


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号