使用 if 条件的列表理解来获取特定类型的文件列表

2024-01-08

大致遵循将列表推导式与 if-else 结合在一起的逻辑这个解决方案 https://stackoverflow.com/questions/14638871/python-ternary-iteration-with-list-comprehension,我试图获取父目录下具有特定扩展名的文件列表。

这是代码的长形式:

mxd_list = []
for top_dir, dir_list, obj_list in os.walk(top_path):
    for obj in obj_list:
        if obj.endswith('.mxd'):
            mxd_list.append(os.path.join(top_dir, obj))

这是我目前尝试使用列表理解来巩固这一点。虽然它运行了,但列表是空的。

for top_dir, dir_list, obj_list in os.walk(top_path):
    mxd_list = [os.path.join(top_dir, obj) for obj in obj_list if obj.endswith('.mxd')]

你离得很近。您需要附加到循环外部的列表

mxd_list = []
for top_dir, dir_list, obj_list in os.walk(top_path):
    mxd_list.extend([os.path.join(top_dir, obj) for obj in obj_list if obj.endswith('.mxd')])

错误在于 - 在外部 for 循环的每次迭代中,列表 comp 将生成仅特定于该迭代的列表,因此您需要extend每次迭代外部变量后生成的每个列表,mxd_list.

注意 - 的[是多余的,因为删除它们将使内容成为生成器表达式。该语句可以写成mxd_list.extend(os.path.join(top_dir, obj) for obj in obj_list if obj.endswith('.mxd')).

另一种方法- 使用glob.iglob https://docs.python.org/2/library/glob.html#glob.iglob

正如帕德里克提到的 https://stackoverflow.com/questions/28682226/list-comprehension-with-ternary-operator-to-get-list-of-files-of-a-specific-type/28682289?noredirect=1#comment45657769_28682289

mxd_list = []
for top_dir, dir_list, obj_list in os.walk(top_path):
     mxd_list.extend(iglob(top_dir+"/*.mxd"))

是一种更好的方法。但不要忘记import该模块,即from glob import iglob

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

使用 if 条件的列表理解来获取特定类型的文件列表 的相关文章

随机推荐

  • CUDA 中的 FIR 滤波器(作为一维卷积)

    我正在尝试在 CUDA 中实现 FIR 有限脉冲响应 滤波器 我的方法非常简单 看起来有点像这样 include
  • 使用适用于 iOS 的 SDK 在 Linkedin 上分享不起作用

    我正在使用 iOS 版移动 SDK 版本 1 0 7 来分享一些内容LinkedIn 我可以获取当前帐户信息 但是当我尝试分享时LinkedIn 总是反馈错误描述 这是我的代码 let url String https api linked
  • 使用 FXMLLoader 时出现 IllegalAccessError

    我正在尝试将 FXML 文件加载到我的 javafx 应用程序中作为我的根小部件 我使用带有 java 11 04 的 Windows 8 1 和带有 Eclipse 2019 IDE 的 javafx sdk 13 我在互联网上搜索了一下
  • 增加 d3 SVG 容器大小

    我正在尝试动态增加 SVG 容器的大小 以便它适合所有数据 有一个小提琴解释了 SVG 的动态增加 http jsfiddle net CKW5q http jsfiddle net CKW5q 然而 相同的概念不适用于双向桑基图 d3 以
  • 如何旋转图像并保存图像

    在我的应用程序中 我的 div 中有一个图像 一个按钮 当我使用 jquery 单击按钮时 我想旋转显示的图像并保存旋转的图像 我已经使用了代码 http code google com p jquery rotate http code
  • 如何通过打字稿代码动态注入 Angular2 子组件?

    上下文 我正在尝试创建一个可以包含多个组件的自定义下拉列表 我可以通过以下方式完成此任务
  • 入门:为 Node.js 设置数据库

    我是 Node js 的新手 但很高兴尝试一下 我在用Express http expressjs com 作为网络框架 以及Jade http jade lang com作为模板引擎 两者都很容易完成以下设置本教程 http www us
  • 从实现类中的接口继承注释?

    假设我有这个界面 public interface IFoo
  • 如何根据设备大小操作 iframe css

    我正在构建此网站 但在根据设备大小操作 iframe 时遇到问题 基本上 我想要的是 如果在平板电脑上使用 则视频是一种尺寸 但例如 如果用户使用手机等移动设备 则视频是其他尺寸 建议它小于平板电脑或桌面窗口尺寸 如果有任何一个从那以后 我
  • JSP scriptlet 中的方法合法吗?

    我知道不推荐它 我应该使用标签库等 但我仍然想知道在 JSP scriplet 中声明方法是否合法 那合法吗 我收到一些奇怪的编译错误 例如a is expected 这似乎不合适 谢谢 您需要使用声明语法
  • Google USB 包未显示在 SDK 管理器中

    我最近下载并安装了 Eclipse Java EE IDE Indigo Service Release 2 我制作了一个在模拟器上运行良好的简单应用程序 现在我想尝试在我的 Android 移动设备上运行它 在 Android 开发者网站
  • 允许后台应用程序设置不同进程的前台窗口

    首先 我知道这是一个有争议的讨论 但我希望我们能够保持技术性 我有一个在后台启动的应用程序 我希望它能够在不同的进程中激活 聚焦窗口 但是 即使我要激活其窗口的进程已调用AllowSetForegroundWindow ASFW ANY 调
  • 接受具有空接口返回类型的参数中的函数

    我想了解为什么下面的代码片段无法编译 Go 接受函数作为可能具有任何返回类型的函数参数的方式是什么 package main func main test a Error cannot use a type func string as t
  • 如何在 Sphinx 处理的文档字符串中表达单个参数或返回值的多种类型?

    有时 Python 中的函数可能接受灵活类型的参数 或者它可能返回一个灵活类型的值 现在我不记得这样的函数的一个很好的例子 因此我用下面的玩具示例来演示这样的函数可能是什么样子 我想知道如何使用 Sphinx 文档符号为此类函数编写文档字符
  • 使弹性项目向右浮动

    I have a div class parent div class child Ignore parent div div another child div div 家长有 parent display flex 对于我的第一个孩子
  • 如何在 ravendb 3.5 中查找附件?

    我目前正在调试一些代码 这些代码应该返回给定文档的附件 但没有返回任何附件 Raven studio 表明数据库中有附件 它向我显示存在多个附件 但我无法通过工作室 Web UI 查看特定文档是否有附件 有没有办法通过工作室用户界面查询附件
  • 路径参数和多种控制器类型

    我有一个 asp net Web api 使用属性在控制器上进行路由 操作级别上没有路线属性 访问资源的路径是 Route id public MyApiController ApiController public HttpRespons
  • QML 几个具有主动焦点/键盘快捷键控制的项目

    我正在尝试为我的 qml 应用程序实现键盘快捷键控制 我知道可以使用 Action 元素来做到这一点 但我不想要强制使用的菜单和工具栏 这就是我通过键盘事件来探讨这个主题的原因 为此 我需要让执行操作的元素成为焦点 但我的目标是全局快捷方式
  • 嵌入谷歌地图 - 如何消除不需要的标记?

    如果我嵌入带有以下内容的谷歌地图 这是 iframe 上的 src 属性 地图上有两个标记 第一个标记是我传入的纬度 经度 绿色箭头 第二个标记是常规标记 有没有办法消除第二个标记 看起来您正在查询字段中发送坐标 这似乎意味着您正在 Goo
  • 使用 if 条件的列表理解来获取特定类型的文件列表

    大致遵循将列表推导式与 if else 结合在一起的逻辑这个解决方案 https stackoverflow com questions 14638871 python ternary iteration with list compreh