[Python] glob内置模块介绍和使用场景(案例)

Unix glob是一种用于匹配文件路径的模式,它可以帮助我们快速地找到符合特定规则的文件。在本文中,我们将介绍glob的基本概念、使用方法以及一些实际应用案例。

glob介绍

Glob(Global Match)是Unix和类Unix系统中的一种文件名扩展功能,它可以根据指定的模式匹配文件名。Glob使用通配符来表示文件名中的特定字符或字符组合,例如*表示任意数量的字符,?表示一个字符,[]表示一个字符集合等。通过这些通配符,我们可以轻松地筛选出符合特定规则的文件。

如何使用glob

在Unix和类Unix系统中,我们可以使用shell内置的glob命令来匹配文件路径。

glob [选项] 模式

其中,模式是一个包含通配符的字符串,用来描述要匹配的文件名或目录名的模式。通配符可以包括以下特殊字符:

  • *:匹配任意字符(包括空字符)。
  • ?:匹配任意单个字符。
  • [字符集]:匹配字符集中的任意一个字符。
  • [!字符集]:匹配不在字符集中的任意一个字符。

可以使用引号将模式括起来,以避免特殊字符被Shell解释。

以下是一些常用的glob命令选项:

  • -d:仅匹配目录。
  • -l:仅匹配符号链接。
  • -r:递归地匹配子目录。
  • -s:匹配命令的结果总数。

Python中的glob内置模块

此外,我们还可以使用Python的glob内置模块来实现类似的功能,该模块用来以特定格式匹配一系列路径,规则与Unix Shell相同,返回一个包含匹配结果的无序列表。实现过程用到了os.scandir和fnmatch.fnmatch(),前者将文件路径输入列表,后者按规则匹配。匹配用到的主要通配符为 *, ? 和 []这三个,基本规则如下:

*: 匹配多个任意字符
?: 匹配1个任意字符
[]: 匹配[]中注明范围内的1个字符,如果要匹配特殊字符比如上面的*和?,用[*]和[?]即可

glob — Unix style pathname pattern expansion — Python 3.12.1 documentation

主要方法:

1) glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Return a possibly empty list of path names that match pathname, which must be a string containing a path specification. 

这个方法返回一个列表,其中包含所有与指定模式匹配的文件路径。如果recursive参数为True,则会递归地搜索目录及其子目录。默认情况下,recursive参数为False。如果root_dir不为None,则返回的路径是相对于root_dir的相对路径。

2) glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Return an iterator which yields the same values as glob() without actually storing them all simultaneously.

这个方法返回一个迭代器,其中包含所有与指定模式匹配的文件路径。如果recursive参数为True,则会递归地搜索目录及其子目录。默认情况下,recursive参数为False。如果root_dir不为None,则返回的路径是相对于root_dir的相对路径。

3) glob.escape(pathname)

这个方法将路径名中的特殊字符转义,以便在正则表达式中使用。例如,它会将*替换为\*,将?替换为\?等。

以下是一个简单的示例:

import glob

# 查找当前目录下所有的.txt文件
txt_files = glob.glob('*.txt')
print(txt_files)

不足之处

glob模块只能做比较简单的匹配查询,不支持同时查询多个文件扩展名,比如.txt和.md文件,需要做2次查询,然后把2次结果进行合并,这样无形中降低了查询的效率。

使用案例

下面我们来看一些实际的使用案例:

查找当前目录下所有以a、b、c开头的目录

glob -d [abc]*

查找所有以.txt结尾的文件

$ glob *.txt
file1.txt
file2.txt
file3.log

Python中使用glob模块查找当前目录的所有以.txt结尾的文件

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

Python中使用glob模块查找指定目录及其子目录下的所有以.txt 结尾的文件

import glob

txt_files = glob.glob('*.txt', root_dir='C:/ABC', recursive=True)
print(txt_files)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式锁的实现方式

分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。实现分布式锁有三种主流方式,接下来一一盘点。 盘点之前要说说选择时的优缺点 数据库实现的锁表完全不推荐。 Redis分布式锁性能优于ZooKeeper,因…

01、领域驱动设计:微服务设计为什么要选择DDD总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道,微服务设计过程中往往会面临边界如何划定的问题,不同的人会根据自己对微服务的理 解而拆分出不同的微服…

通过 GScan 工具自动排查后门

一、简介 GScan 是一款为安全应急响应提供便利的工具,自动化监测系统中常见位置。 工具运行环境:CentOS (6、7) python (2.x、3.x) 工具检查项目: 1、主机信息获取 2、系统初始化 alias 检查 3、文件类安全扫描 3.1、系统重要文件完整行…

JS进阶-深入对象(二)

拓展:深入对象主要介绍的是Js的构造函数,实例成员,静态成员,其中构造函数和Java种的构造函数用法相似,思想是一样的,但静态成员和实例成员和java种的有比较大的差别,需要认真理解 • 创建对象三…

Switch用法以及新特性-最全总结版

本篇文章参考了大佬文章,感谢大佬无私分享: http://t.csdnimg.cn/MjZnX http://t.csdnimg.cn/QFg0x 目录 一、Switch用法:JDK7及以前 1.1、举例一: 1.2、举例二: 二、Switch穿透: 2.1、举例&#xf…

三极管的奥秘:如何用小电流控制大电流

双极性晶体管(英语:bipolar transistor),全称双极性结型晶体管(bipolar junction transistor, BJT),俗称三极管,是一种具有三个引脚的电子元器件。 本文是讲述的是三极管的基础知识…

基于openssl v3搭建ssl安全加固的c++ tcpserver

1 概述 tcp server和tcp client同时使用openssl库,可对通信双方流通的字节序列进行加解密,保障通信的安全。本文以c编写的tcp server和tcp client为例子,openssl的版本为v3。 2 安装openssl v3 2.1 安装 perl-IPC-Cmd openssl项目中的co…

企业内部知识库搭建教程,赶紧收藏起来

在企业运营中,内部知识库搭建是一项重要的挑战,并需要合理的规划与管理。尤其对于中大型企业,内部知识库能够提高工作效率,减轻员工工作压力与突发事件的处理的困扰。下面给大家提供一份完整的内部知识库搭建教程,快看…

UE4运用C++和框架开发坦克大战教程笔记(十五)(第46~48集)

UE4运用C和框架开发坦克大战教程笔记(十五)(第46~48集) 46. 批量加载 UClass 功能测试批量加载多个同类 UClass 资源 47. 创建单个资源对象测试加载并创建单个 UClass 资源对象 48. 创建同类资源对象 46. 批量加载 UClass 功能 逻…

Leetcode1143. 最长公共子序列

解题思路 求两个数组或者字符串的最长公共子序列问题,肯定是要用动态规划的。下面的题解并不难,你肯定能看懂。 首先,区分两个概念:子序列可以是不连续的;子数组(子字符串)需要是连续的&#xf…

rabbitmq基础-java-3、Fanout交换机

1、简介 Fanout,英文翻译是扇出。 2、 特点 1) 可以有多个队列 2) 每个队列都要绑定到Exchange(交换机) 3) 生产者发送的消息,只能发送到交换机 4) 交换机把消息发送给绑定过的…

3d模型怎么分辨材质?--模大狮模型网

在3D模型中,通常可以通过以下几种方式来分辨材质: 视觉检查:在3D渲染视图或预览窗口中,您可以直接观察模型的外观来区分不同的材质。不同的材质可能具有不同的颜色、纹理、反射率等特征,因此通过直观的视觉检查&#x…

网络通信课程总结(小飞有点东西)

27集 局域网通信:用MAC地址 跨局域网通信:用IP地址(MAC地址的作用只是让我们找到网关) 又因为arp技术,可以通过MAC地址找到IP地址,所以我们可以通过IP地址定位到全世界任意一台计算机。 28集 在数据链路…

C语言每日一题(47)两数相加II

力扣 445 两数相加II 题目描述 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例1: 输入&#xff…

了解WPF控件:RadioButton和RepeatButton常用属性与用法(九)

掌握WPF控件:熟练常用属性(九) RadioButton 一种允许用户在一组选项中单选一个的控件。通常用于提供一组互斥的选项供用户选择。 常用属性描述Content用于设置 RadioButton 显示的文本内容。GroupName用于将多个 RadioButton 控件组合到一…

船的最小载重量-算法

说明:题解完全是从leetCode上拉下来的,在这里只是作为一个备份,怕之后找不着了。同时也分享给大家,这个题目用了一个我之前从未遇到的思路。 原题:船的最小载重量-leetCode1101 题目(看懂题目了吗&#xff…

python批量处理修改pdf内容

将PDF转换为Word: 使用pdf2docx库中的Converter类来进行PDF转换。convert_pdf_to_docx函数接受PDF文件路径和输出的Word文档路径作为参数。通过调用Converter对象的convert方法将PDF转换为Docx格式。最后调用close方法关闭Converter对象并保存转换后的文档。 将Word…

QT下载、安装详细教程[Qt5.15及Qt6在线安装,附带下载链接]

QT5.15及QT6的下载和安装 1.下载1.1官网下载1.2国内镜像网站下载 2.安装3.软件启动及测试程序运行3.1Qt Creator(Community) 1.下载 QT自Qt5.15版本后不在支持离线安装包下载(非商业版本,开源),故Qt5.15及Qt6需要使用在线安装程序…

Zephyr 源码调试

背景 调试环境对于学习源码非常重要,但嵌入式系统的调试环境搭建稍微有点复杂,需要的条件略多。本文章介绍如何在 Zephyr 提供的 qemu 上调试 Zephyr 源码,为后续分析 Zephyr OS 相关原理做铺垫。 环境 我的开发环境为 wsl ubuntu&#xf…

使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

原理 LlamaIndex的文档链接:Using LLMs - LlamaIndex 🦙 0.9.33 LlamaIndex 的一般使用模式如下: 加载文档(手动或通过数据加载器)将文档解析为节点构建索引(来自节点或文档)(可选,高级&…