glob模块篇

文章目录

  • glob模块介绍
  • 搜索当前目录下的所有 .txt 文件:
  • 搜索特定目录下的所有 .py 文件:
  • 搜索子目录中的文件:
  • 使用通配符:
  • glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
  • glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
  • glob.escape(pathname)
  • glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)

glob模块介绍

glob 是 Python 中的一个标准库模块,用于在目录中使用通配符搜索创建文件列表。这个模块提供了一个在目录中使用通配符搜索文件名的函数,返回匹配所有路径名的列表。它类似于 Unix shell 中的功能。

这里有一些使用 glob 模块的基本示例:

导入模块:


import glob

搜索当前目录下的所有 .txt 文件:


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

搜索特定目录下的所有 .py 文件:


py_files = glob.glob('/path/to/directory/*.py')  print(py_files)

搜索子目录中的文件:

使用 ** 来递归搜索子目录。注意,这个功能在 Python 3.5+ 中可用。


all_py_files = glob.glob('/path/to/directory/**/*.py', recursive=True)  print(all_py_files)

使用通配符:

你可以使用 ? 来匹配单个字符,和 * 来匹配任意字符序列(包括空序列)。


# 搜索所有以 'a' 开头,以 '.txt' 结尾的文件  a_txt_files = glob.glob('a*.txt')  print(a_txt_files)

glob 模块在处理大量文件或需要递归搜索子目录的情况时特别有用。不过,它并不提供对文件内容的直接操作,只是返回匹配的文件路径列表。对于文件内容的处理,你通常需要结合其他模块,如 os 或文件操作函数(如 open())。

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

glob.glob() 函数在 Python 中用于路径名模式匹配,它基于 Unix shell 风格的通配符来搜索符合特定模式的文件名。glob 模块提供的 glob() 函数接受多个参数,用于控制搜索的行为。以下是对 glob.glob() 函数参数的详细解释:
参数:

  • pathname:要搜索的模式字符串。模式可以包含通配符 *、? 和 [seq],以及字符类(如 [a-z])和 ! 来排除字符。
  • root_dir(Python 3.9+ 新增):可选参数,用于指定搜索的根目录。如果提供了 root_dir,则 pathname 相对于该目录进行解释。这有助于防止路径遍历攻击。
  • dir_fd(Python 3.3+ 新增):一个可选的文件描述符,它应该引用一个目录。如果提供了此参数,则搜索将在该目录中进行,而不是在当前工作目录中。这允许在不改变当前工作目录的情况下搜索目录。
  • recursive(Python 3.5+ 新增):一个布尔值,如果为 True,则模式会递归地应用于目录及其所有子目录。这允许你使用 ** 通配符来匹配任意数量的目录。
  • include_hidden(Python 3.10+ 新增):一个布尔值,如果为 True,则搜索将包括隐藏文件(在 Unix-like 系统中,通常以点(.)开头的文件)。默认情况下,隐藏文件会被排除。

返回值:

返回一个字符串列表,包含所有匹配 pathname 模式的路径名。
示例:
基本使用:

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

使用递归搜索:


# 搜索当前目录及其子目录下所有的 .py 文件  py_files = glob.glob('**/*.py', recursive=True)  print(py_files)

使用 root_dir 参数:


# 搜索指定目录下的所有 .csv 文件,防止路径遍历攻击  csv_files = glob.glob('*.csv', root_dir='/path/to/secure/directory')  print(csv_files)

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

glob.iglob() 函数与 glob.glob() 函数非常相似,它们都用于在文件系统中搜索匹配特定模式的文件路径。主要区别在于 glob.iglob() 返回一个迭代器,而不是一个包含所有匹配路径的列表。这意味着 iglob() 在处理大量文件或需要逐步处理匹配路径时可能更加高效,因为它不需要一次性将所有匹配项加载到内存中。

下面是 glob.iglob() 函数的参数解释:
参数:

  • pathname:要搜索的模式字符串。与 glob.glob() 中的 pathname 参数相同,可以包含通配符。
  • root_dir(Python 3.9+ 新增):指定搜索的根目录。如果提供了 root_dir,则 pathname 相对于该目录进行解释。这有助于防止路径遍历攻击。
  • dir_fd(Python 3.3+ 新增):一个可选的文件描述符,引用一个目录。搜索将在该目录中进行,而不是在当前工作目录中。
  • recursive(Python 3.5+ 新增):一个布尔值,如果为 True,则模式会递归地应用于目录及其所有子目录。
  • include_hidden(Python 3.10+ 新增):一个布尔值,如果为 True,则搜索将包括隐藏文件。

返回值:

返回一个迭代器,产生所有匹配 pathname 模式的路径名。你可以使用 for 循环来遍历这些路径。

示例:

使用 iglob() 逐步处理匹配路径:


import glob  
# 搜索当前目录及其子目录下所有的 .py 文件  for py_file in glob.iglob('**/*.py', recursive=True):  print(py_file)  # 在这里可以对每个 py_file 进行处理,而不是一次性处理所有文件

在这个例子中,iglob() 返回一个迭代器,我们使用 for 循环来遍历每个匹配 .py 文件的路径,并逐个进行处理。这样,我们不需要一次性将所有匹配的文件路径加载到内存中,这对于处理大量文件时非常有用。

glob.escape(pathname)

Python glob 模块中的一个函数,它用于转义 pathname 中的所有特殊字符,这样 pathname 就可以被安全地用作 glob 函数的参数,而不会受到通配符(如 * 和 ?)的影响。
参数:

  • pathname:要转义的路径名字符串。

返回值:

返回一个字符串,其中 pathname 中的所有特殊字符都被转义了。

示例:

假设你有一个文件名,它包含一个 *,你想用 glob 来搜索这个文件,但你不希望 * 被当作通配符来处理。你可以使用 glob.escape() 来转义这个 *:

import glob  
# 假设有一个文件名包含通配符 *  
filename = 'file*.txt'  
# 使用 glob.escape() 来转义文件名中的特殊字符  
escaped_filename = glob.escape(filename)  
# 现在可以使用转义后的文件名来安全地搜索文件  
matching_files = glob.glob(escaped_filename)  
print(matching_files)

在这个例子中,glob.escape(filename) 会返回类似 ‘file*.txt’ 的字符串(实际返回的字符串取决于平台,可能包含额外的转义字符),这样当你使用 glob.glob(escaped_filename) 时,* 就不会被当作通配符来匹配任意字符序列,而是会被当作文件名中的普通字符来搜索。

这个函数在处理用户输入或不确定是否包含通配符的文件名时特别有用,因为它可以确保 glob 函数按照预期的方式工作。

glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)

Python glob 模块中的一个函数,用于将通配符模式转换为正则表达式模式。这通常在你想要更直接地控制搜索过程或需要更复杂的匹配逻辑时很有用。通过将 glob 模式转换为正则表达式,你可以利用 Python 的 re 模块来进行更高级的搜索和匹配。
参数:

  • pathname:包含通配符的原始 glob 模式字符串。
  • recursive(Python 3.5+ 新增):一个布尔值,如果为 True,则模式会递归地应用于目录及其所有子目录。这主要用于转换递归搜索的模式,如 **/*.py。
  • include_hidden(Python 3.10+ 新增):一个布尔值,如果为 True,则转换后的正则表达式将匹配隐藏文件(在 Unix-like 系统中,通常以点(.)开头的文件)。
  • seps(Python 3.11+ 新增):一个可选的字符集,它应该包含用于分隔路径组件的字符。在 Unix 系统中,这通常是 ‘/’;在 Windows 系统中,这可能是 ‘/’ 或 ‘\’。这个参数用于正确处理路径分隔符。

返回值:

返回一个字符串,它是 pathname 对应的正则表达式模式。
示例:

import glob  
import re  # 定义一个 glob 模式  
glob_pattern = '*.txt'  
# 将 glob 模式转换为正则表达式模式  
regex_pattern = glob.translate(glob_pattern)  
# 使用 re 模块来搜索匹配的文件  
for filename in os.listdir('.'):  if re.match(regex_pattern, filename):  print(filename)

在这个例子中,glob.translate(glob_pattern) 将 *.txt 这个 glob 模式转换为一个正则表达式模式,然后我们使用 re.match() 来检查当前目录下的每个文件名是否匹配这个正则表达式。

需要注意的是,虽然 glob.translate() 提供了将 glob 模式转换为正则表达式的能力,但通常情况下,直接使用 glob.glob() 或 glob.iglob() 会更加简单和方便,除非你确实需要正则表达式的复杂匹配能力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中数字转汉字,带小数转化

小数转为角分 export default { methods: { numberToChinese(num) { if (typeof num ! number || isNaN(num)) { return 输入的不是一个有效的数字; } const chineseNums [零, 一, 二, 三, 四, 五, 六, 七, 八, 九]; const units [, 十, 百, 千]; const bigUnits […

城市内涝排水新模式:慧天[HTWATER]

慧天[HTWATER]软件:慧天排水数字化分析平台针对城市排水系统基础设施数据管理的需求,以及水文、水力及水质模拟对数据的需求,实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模…

Transformers 直观解释——不仅是如何工作,而且为什么工作得这么好

输入序列如何到达Attention模块 注意力模块存在于编码器堆栈中的每个编码器中,以及解码器堆栈中的每个解码器中。我们将首先放大编码器的注意力。 Attention in the Encoder: 举个例子,假设我们正在研究一个英语到西班牙语的翻译问题&…

【旅游】泉州攻略v1.0.0

一、泉州古城 泉州市距离深圳大约520公里,从深圳北站出发,高铁大约3小时30分。 到达泉州西站后,往东南方向大约8公里,就可以到达主要的旅游景点泉州古城。 古城很适合使用一天玩耍,核心路线如下: 一路的景…

C++ STL教程

C STL教程 文章目录 C STL教程1.1 std::vector1.1.1vector的定义1.1.2vector容器的初始化1.1.3vector容器内元素的访问和修改1.1.4vector中的常用函数 1.2 std::string1.2.1string的定义1.2.2string的初始化1.2.3string中元素的访问和修改1.2.4string中连接字符串1.2.5string中…

AtCoder Beginner Contest 337 A - E

A - Scoreboard 大意 高桥队和青木队进行了场比赛&#xff0c;给出每场比赛中高桥队和青木队的积分&#xff0c;问最后谁总分更高或平局。 思路 统计总分比较即可。 代码 #include<iostream> using namespace std; int main(){int n, a0, b0;cin >> n;while(…

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

184. 部门工资最高的员工

文章目录 题意思路代码 题意 题目链接 查出每个部门最高工资 思路 子查询group by 代码 select b.name as Department,a.name as Employee,salary from Employee as a left joinDepartment as b ona.departmentId b.id where(a.departmentId, salary) in(select departme…

C++迈向精通:学习笔记:类属性与类方法

类属性与类方法 注意&#xff1a;这不是教程&#xff0c;是学习笔记&#xff0c;不适合初学者阅读&#xff01;&#xff01; 类属性与方法 成员属性与成员方法 在类中定义的方法与属性&#xff0c;就叫做成员属性与方法。 类属性与类方法 依然在类里面&#xff0c;但区别…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…

字节流 字符流回顾

字节流&#xff1a;字节流以字节为单位进行数据传输。这种流适用于处理二进制数据&#xff0c;例如图片、音频、视频等文件。在Java中&#xff0c;字节流由InputStream和OutputStream类及其子类实现。常见的字节流类包括FileInputStream、FileOutputStream、等。 字符流&#…

2024全国水科技大会【高峰对话】北京排水集团(附部分报告题目)

北京排水集团坚持“服务社会、造福百姓、企业利益与公众利益高度一致”的宗旨&#xff0c;充分认知自身在地区经济发展中的社会责任&#xff0c;以满足政府与公众对公用事业企业服务的需求为首要任务&#xff0c;通过“现代化的队伍、现代化的手段、现代化的设备和现代化的管理…

springBoot+ureport报表引擎

UReport是一款基于单元格迭代模型的纯Java中式报表引擎。它架构于Spring之上&#xff0c;因此与企业应用具有良好的集成能力。UReport提供了基于Eclipse插件与基于网页的两种报表模版设计方式&#xff0c;采用类Excel报表模版设计风格&#xff0c;简单、易上手&#xff0c;可在…

数据结构和算法:搜索

二分查找 二分查找&#xff08;binary search&#xff09; 是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止。 给定一个长度为 &#x1d45b; 的数组 nums &#xff0c;元素按从小到大…

django orm DateTimeField 6位小数精度问题

from django.db.backends.mysql.base import DatabaseWrapperDatabaseWrapper.data_types[DateTimeField] "datetime"意思就是重写源码里面的DateTimeField字段

如何在家中使用手机平板电脑 公司iStoreOS软路由实现远程桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

《1w实盘and大盘基金预测 day12》

昨天预测大错特错&#xff0c;大盘也破位了。 昨天预测&#xff1a; 3006-3043-3053 震荡反弹&#xff0c;冲高回落 主要关注证券、保险等金融板块&#xff0c;是否能带大盘到新高&#xff1f; 吐槽一下医疗&#xff0c;真lj。吐了 科技可能还要调整&#xff0c;明显感觉资金…

CloudCompare 二次开发(29)——最小二乘拟合平面

目录 一、概述二、代码集成三、结果展示一、概述 使用CloudCompare实现的最小二乘拟合平面。具体计算原理见:PCL 最小二乘拟合平面。 二、代码集成 1、mainwindow.h文件public中添加: void doActionPCLLeastSquareFitPlane(); // 最小二乘拟合平面2、mainwindow.cpp文件…

keyStore类处理

加载公钥证书, 成为keyStore public static void main(String[] args) {Security.addProvider(new BouncyCastleProvider());String certFilePath "C:\\alipayRootCert.crt";String certType "X.509";String provider "BC";try (FileInputSt…

mybatis一键配置

mybaits起步依赖<!-- mybatis的起步依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!-- mysql驱动 --><dependency><groupId&…