【Python】 glob批处理模块的学习

1.什么是glob模块?

  • 在 Python 中,glob模块是一个用于文件路径名的模式匹配的工具。它使用简单的通配符规则来匹配文件和目录的路径,这些通配符规则类似于在命令行中使用的文件搜索规则。这使得在处理文件系统中的多个文件或目录时非常方便,可以快速地获取符合特定模式的文件路径列表。

2. 通配符规则

  • *(星号)通配符
  • 示例:假设在当前目录下有file1.txtfile2.txtdata.csvreport.docx这些文件。使用glob.glob('*.txt')将返回['file1.txt', 'file2.txt'],它只会匹配扩展名为.txt的文件。
  • 功能:*可以匹配任意长度(包括零长度)的字符序列。例如,*.txt表示匹配所有以.txt为扩展名的文件,不管文件名的前面部分是什么。

  • ?(问号)通配符
    • 功能:?可以匹配任意单个字符。例如,file?.txt会匹配像file1.txtfile2.txt等文件名,其中?的位置可以是任意一个字符。

    • 示例:如果有file1.txtfile2.txtfileA.txtdata.txt这些文件,glob.glob('file?.txt')将返回['file1.txt', 'file2.txt', 'fileA.txt'],它匹配文件名是file后面跟着一个字符且扩展名为.txt的文件。

  • [](方括号)通配符
    • 功能:[]用于匹配方括号内指定的一组字符中的任意一个。例如,file[123].txt会匹配file1.txtfile2.txtfile3.txt

    • 示例:假设有file1.txtfile2.txtfile4.txtfileA.txt这些文件,glob.glob('file[123].txt')将返回['file1.txt', 'file2.txt'],只匹配文件名中file后面跟着123且扩展名为.txt的文件。

3.glob模块的主要函数

    • glob.glob()函数

    • 功能:该函数返回所有匹配指定模式的文件路径的列表。它接受一个表示路径模式的字符串作为参数,在当前目录以及子目录(如果模式包含目录遍历相关的部分)中搜索匹配的文件路径。
    • 示例:搜索当前目录下所有的 Python 文件:
         import globpython_files = glob.glob('*.py')print(python_files)

搜索指定目录下(例如data目录)所有的.csv文件:

         import globcsv_files_in_data_dir = glob.glob('data/*.csv')print(csv_files_in_data_dir)

glob.iglob()函数

  • 功能:这是一个生成器函数,它与glob.glob()类似,用于返回匹配指定模式的文件路径。但是,它返回的是一个生成器对象,而不是一个列表。这样在处理大量文件路径时,可以节省内存,因为生成器是按需生成元素的,而不是一次性生成所有元素。
  • 示例:
       import globfor file_path in glob.iglob('*.jpg'):print(file_path)

这个示例会逐个打印出当前目录下所有匹配*.jpg模式的文件路径,而不是将所有路径存储在一个列表中再处理。

使用glob模块的注意事项

  • 路径的相对性质glob函数所使用的路径模式是相对路径,默认是相对于当前工作目录的。如果需要指定绝对路径,需要在模式字符串中提供完整的路径信息。例如,要搜索根目录下的/var/log目录中的.log文件,可以使用glob.glob('/var/log/*.log')

  • 目录的遍历:当模式中包含目录遍历部分(如**)时,要注意性能问题。例如,**/*.txt会遍历当前目录及其所有子目录来查找.txt文件,这在目录结构复杂且文件数量众多时可能会消耗较多的时间和资源。在 Python 3.5 及以上版本中,**用于递归地匹配目录。

  • 区分大小写:在大多数操作系统中,glob模块的匹配是区分大小写的。例如,*.TXT不会匹配名为file.txt的文件,只会匹配扩展名为.TXT的文件(如果有的话)。

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

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

相关文章

Android 系统 AlarmManager 系统层深度定制

Android 系统 AlarmManager 系统层深度定制 目录 引言AlarmManager 概述AlarmManager 系统架构AlarmManager 核心代码解读AlarmManager 深度定制方法 修改 AlarmManagerService 修改定时任务调度策略增加定时任务类型定制内核层 修改定时触发精度增加定时触发类型优化定时任务…

解决vue-i18n在非.vue文件中,在其他js文件中无法使用的问题

其实很简单,把i18n直接挂载到window上,全局可使用。下面请看详细。 一、安装 npm install vue-i18n9二、在vue的main.js中引入 import Vue from "vue" import VueI18n from vue-i18n Vue.use(VueI18n)//注入到所有的子组件,就是…

线性代数期末复习 [基础篇]

关于第六点: AXB 在期末考试中一般A都是可逆的 我们可以先把A的逆求出来,X A − 1 B A^-1B A−1B,或者 (A,B) -> r (E, A − 1 B A^-1B A−1B) 如果A矩阵不可逆,转变为方程组求解问题,假设都是二维矩阵 A(x1,x2) (b1,b2) Ax1 b1,Ax2 b2 XAB 如果A可逆,直接XB A − 1 A^-…

C++ —— 数据类型转换和数据类型的别名

数据类型转换 引言自动类型转换强制类型转换数据类型的别名 引言 计算机进行运算时,要求各操作数的数据类型、大小和存储方式都要相同。(例如:8字节的整数和8字节的浮点数,虽然占用内存大小一样,但是存储方式不同&…

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中,软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包,但有时由于网络条件或地理位置的限制,使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…

设计模式-创建型-工厂方法模式

什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是 创建型设计模式之一,目的是通过定义一个用于创建对象的接口,让子类决定实例化哪个类。简而言之,工厂方法模式通过延迟对象的创建过程到子类来…

【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor

IJob&#xff1a;开启单个线程进行计算&#xff0c;线程内不允许对同一个数据进行操作&#xff0c;也就是如果你想用多个IJob分别计算&#xff0c;将其结果存储到同一个NativeArray<int>数组是不允许的&#xff0c;所以不要这样做&#xff0c;如下例子就是反面教材&#…

Spring 创建和管理 Bean 的原理,以及Spring 的单例模式是否线程安全?(有无状态Bean)

Spring 是一个轻量级的开源框架&#xff0c;广泛应用于 Java 企业级应用的开发。它提供了一个全面的、基于 IOC&#xff08;控制反转&#xff09;和 AOP&#xff08;面向切面编程&#xff09;的容器&#xff0c;可以帮助开发者更好地管理应用程序中的对象。 Spring 创建和管理…

Docker容器镜像制作

Docker镜像的基本概念 1. 什么是Docker镜像&#xff1f; Docker镜像是一种轻量级、可执行的软件包&#xff0c;包含运行某个应用所需的所有代码、库、依赖项和配置文件。它的形成是一种“打包”和“快照”过程&#xff0c;使得应用能够在不同环境中保持一致的功能表现。 2. …

InfoNCE Loss详解(上)

引言 InfoNCE对比学习损失是学习句嵌入绕不开的知识点&#xff0c;本文就从头开始来探讨一下它是怎么来的。 先验知识 数学期望与大数定律 期望(expectation&#xff0c;expected value&#xff0c;数学期望&#xff0c;mathematical expectation)是随机变量的平均值&#…

.Net加密与Java互通

.Net加密与Java互通 文章目录 .Net加密与Java互通前言RSA生成私钥和公钥.net加密出数据传给Java端采用java方给出的公钥进行加密采用java方给出的私钥进行解密 .net 解密来自Java端的数据 AES带有向量的AES加密带有向量的AES解密无向量AES加密无向量AES解密 SM2(国密)SM2加密Sm…

工作中常用Vim的命令

Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 0. ctags -R 1.认识 Vim的几种工作模式 2.高频使用命令 2.1 修改文件 2.2 关于行号 2.3 删除多行&#xff0c;删除部分 2.4 复制粘贴 2.5 光标移动 2.…

如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题

一、文章大纲 1.前言 介绍 Swiper 作为一款强大的轮播组件,常用于处理图片、文章、商品等内容的滑动展示。 在 Vue.js 项目中集成 Swiper,尤其是在 Vue 2 中使用,常见的两种数据来源:静态数据与后端数据。 在 Vue 2 项目中集成 Swiper 5.4.5 2.如何通过 npm 安装 Swiper…

究极炫酷3D立方体宇宙

演示动画&#xff1a;https://life.mdjsjd.me/2024/12/27/3d-cube-animation/ 一个使用Python和Pygame制作的炫酷3D立方体动画效果。结合了多种视觉特效,包括: 动态旋转的3D立方体炫彩渐变的颜色系统星空背景粒子效果动态残影拖尾效果深度透视投影 主要特性 动态变换: 立方…

什么是 Azure OpenAI ?了解微软 Azure OpenAI 和 OpenAI 的关系

一、什么是Azure OpenAI &#xff1f; 微软已与 OpenAI 合作以实现三个主要目标&#xff1a; ⦿利用 Azure 的基础结构&#xff08;包括安全性、合规性和区域可用性&#xff09;&#xff0c;帮助用户构建企业级应用程序。 ⦿在微软产品&#xff08;包括 Azure AI 产品以及以外…

Linux day 1129

家人们今天继续学习Linux&#xff0c;ok话不多说一起去看看吧 三.Linux常用命令 3.1 Linux命令体验 3.1.1 常用命令演示 在这一部分中&#xff0c;我们主要介绍几个常用的命令&#xff0c;让大家快速感 受以下 Linux 指令的操作方式。主要包含以下几个指令&#xff1a; ls命…

mysql8 从C++源码角度看 Statement cancelled due to timeout or client request异常

##Statement cancelled due to timeout or client request 异常 Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client requestat com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1932)at …

【数据结构-单调队列】力扣1438. 绝对差不超过限制的最长连续子数组

给你一个整数数组 nums &#xff0c;和一个表示限制的整数 limit&#xff0c;请你返回最长连续子数组的长度&#xff0c;该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。 如果不存在满足条件的子数组&#xff0c;则返回 0 。 示例 1&#xff1a; 输入&#x…

SAP HCM 标准报表与前台操作的增强差异逻辑分析(rhgrenz4)

导读 增强差异:SAP的HCM模块组织和人事增强都有标准的增强点&#xff0c;不管你调用标准的函数还是前台操作都会触发对应的增强。所以很多业务不需要考虑那么多分散点&#xff0c;只要找到一个合适的增强点&#xff0c;就能解决很多和外围系统集成的业务逻辑&#xff0c;今天遇…

【Spring】Spring DI(依赖注入)详解——自动装配——手动装配与自动装配的区别

在spring开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;是实现松耦合和高内聚设计的重要模式。它使得对象的创建和管理与其依赖关系分离&#xff0c;从而提高了代码的可维护性、可测试性和灵活性。Spring框架通过IoC&#xff08;控制反…