如何使用 os.scandir() 在目录树上递归返回 DirEntry 对象?

2023-12-24

Python 3.5 的os.scandir(path)函数返回轻量级 DirEntry 对象,这些对象对于有关文件的信息非常有帮助。但是,它仅适用于传递给它的直接路径。有没有办法将其包装在递归函数中,以便它访问给定路径下的所有子目录?


您可以使用递归扫描os.walk(),或者如果你需要DirEntry对象或更多控制,编写一个递归函数,例如scantree() below:

try:
    from os import scandir
except ImportError:
    from scandir import scandir  # use scandir PyPI module on Python < 3.5

def scantree(path):
    """Recursively yield DirEntry objects for given directory."""
    for entry in scandir(path):
        if entry.is_dir(follow_symlinks=False):
            yield from scantree(entry.path)  # see below for Python 2.x
        else:
            yield entry

if __name__ == '__main__':
    import sys
    for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'):
        print(entry.path)

Notes:

  • 还有几个例子PEP 471 https://www.python.org/dev/peps/pep-0471/#examples并在os.scandir() 文档 https://docs.python.org/3/library/os.html#os.scandir.
  • 您还可以在 for 循环中添加各种逻辑来跳过以'.'以及这种事情。
  • 你通常想要follow_symlinks=false on the is_dir()调用这样的递归函数,以避免符号链接循环。
  • 在 Python 2.x 上,替换yield from符合:

    for entry in scantree(entry.path):
        yield entry
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 os.scandir() 在目录树上递归返回 DirEntry 对象? 的相关文章

随机推荐

  • C# 中的模拟文件 IO 静态类

    我是单元测试的新手 我需要模拟 System IO 命名空间中的 File 静态类 我正在使用 Rhinomock 实现此目的的最佳方法是什么 可以说我需要模拟 File Exists File Delete 您无法使用 Rhino 模拟来
  • Hibernate 验证@ManyToOne 至少有一个

    我将 Spring 4 1 与 Hibernate 一起使用 并使用 OneToMany ManyToOne 等注释实体 对于某种情况 A 类 有很多 B 类 如果 A 类没有至少一个与之关联的 B 类 则 A 类无效 有没有一种简单的方法
  • 使用 pyparsing 解析数学表达式

    我正在尝试使用 pyparsing 来解析数学表达式 我知道我可以从 pyparsing 网站复制示例计算器 但我想理解它 以便稍后添加 我来这里是因为我试图理解这个例子 但我做不到 所以我尽力了 我得到了这个 symbol pp Lite
  • 如何找到域名的权威名称服务器?

    如何找到冲突的 DNS 记录的来源 您需要给定域名的 SOA 授权起始 记录 这就是您使用通用可用的nslookup命令行工具 command line gt nslookup gt set querytype soa gt stackov
  • 扩展店件模型

    我需要扩展 Shopware 变体模型 以便添加一些自定义属性 例如金属类型 石头宝石类型 这是基础文章 这些属性将在后端和前端使用 我怎样才能做到这一点 谢谢 扩展 Shopware 核心模型本身根本不可能 根据您尝试扩展的具体模型 有两
  • Maven Surefire 默认情况下顺序执行测试用例吗?

    这是此内容的后续内容question https stackoverflow com questions 7267790 does junit execute test cases sequentially当我深入研究我的研究时我意识到 假
  • iPhone / iPad / iPod 滑动事件 javascript

    我正在寻找 如果可能的话 JavaScript 库 插件来提供滑动事件 然而 我并不追求简单的滑动检测 例如 jqTouch 提供的 我希望创建类似于 iPod 设备上的图像查看器的行为 例如 您向左或向右拖动即可转到下一张图像 您必须将图
  • 在带有边框的画布中的当前剪辑上绘制位图(绘画)

    我正在通过编写游戏来学习 Android 并且在图形 API 方面遇到问题 我想将图像绘制成路径的形状 然后在路径上添加边框 我能够使用路径剪辑图像 但找不到在其上添加边框的方法 我认为这很简单 因为 API 支持 Canvas draw
  • MOV x86 指令是否实现 C++11 memory_order_release 原子存储?

    根据这个https www cl cam ac uk pes20 cpp cpp0xmappings html https www cl cam ac uk pes20 cpp cpp0xmappings html 已发布的商店实现为MOV
  • 如何将多级对象映射到indexedDB以获得最佳效率

    我的问题涉及在indexedDB 中布置数据结构 我开始构建一个小型网页功能 该功能逐渐发展成为一种网络学习工具 现在更接近于独立的渐进式网络应用程序 使用 localStorage 效果很好 但随着该工具的发展 5MB 限制可能会成为某些
  • AdMob 同意书未显示?

    我不明白为什么 Google 提供的同意书没有显示 说加载成功 但是却没有显示 我在欧洲 所以我的位置不是问题 我在模拟器和真实设备上都尝试过 我只手动选择了 12 个广告提供商 这是有问题的代码 PACConsentInformation
  • 如何调试在启动时启动的进程?

    我正在尝试在启动时启动的 Windows 服务中设置断点 由于我犯了一个不幸的错误 该服务迫使机器进入重新启动循环 这意味着我无法达到可以部署修复程序的稳定状态 而且显然我无法尝试调试该服务在更方便的时间 我可以在内核模式下使用windbg
  • 在 Android Studio 的依赖项中显示没有 OpenCV 模块

    我尝试了很多教程和博客在 Android Studio 上设置 OpenCV Android 库他们中的一些人在这里 在 Android Studio 上设置 OpenCV Android 库的初学者指南 https android jle
  • 如何直接从字节数组显示 JPEG 图像(保存图像之前)?

    我从客户端套接字接收 jpeg 图像 图像大小 50KB 并保存在模拟器 SD 卡中 从那里我在 Imageview 中显示 jpg 图像 但我想在将图像保存到SD卡上之前显示图像 因为我们的android应用程序将从套接字接收连续图像 如
  • 基于HADOOP_HOME自动加载HDFS配置?

    我正在开发一个 Java 程序来与已经运行的 hadoop 集群交互 该计划有HADOOP HOME作为环境变量传递给它 根据这个值 我需要在开始与 HDFS MapReduce 交互之前加载所有必要的配置资源 我认为我需要的文件基于阿帕奇
  • 从函数 PostgreSQL 返回多列和行而不是记录

    我正在网上阅读关于 PostgreSQL 上的函数并返回结果 在这个链接中 SQL 函数返回类型 TABLE 与 SETOF 记录 https stackoverflow com questions 22423958 sql functio
  • 为什么 event.clientX 在 Firefox 中的 Dragend 事件中错误地显示为 0?

    警报来自dragend正在显示mouseX无论当前在哪里 都为零 这在 Chrome 中运行良好 所以不确定我做错了什么 function move e obj but if typeof obj string obj document g
  • Visual Studio Code 显示错误的打字稿错误,这些错误在重新打开文件后消失

    Visual Studio Code 向我显示了奇怪的打字稿错误 但这些错误并不真实 当我输入时 VSC 似乎发现语法错误 这可能是真的 但是当我停止输入并且语法正确时 它仍然显示错误的错误 例如 如果我关闭该文件并再次打开它 错误就会消失
  • 多个 dex 文件定义 - 删除额外的 jar 文件仍然不起作用。我应该怎么办?

    我正在尝试将 Google Play 服务实施到我的应用程序中 我知道有一个名为 BaseGameUtils 的示例项目 我需要将其导入到我的工作区并将其标记为库 将 google play services lib 导入到我的工作区后 我
  • 如何使用 os.scandir() 在目录树上递归返回 DirEntry 对象?

    Python 3 5 的os scandir path 函数返回轻量级 DirEntry 对象 这些对象对于有关文件的信息非常有帮助 但是 它仅适用于传递给它的直接路径 有没有办法将其包装在递归函数中 以便它访问给定路径下的所有子目录 您可