Glob 文件匹配

news2024/12/27 13:23:12

前言

glob本质是Unix shell 风格的路径匹配规则。
该规则后续被其它语言支持。

?:匹配一个任意字符
*:匹配任意个任意字符
[sequence]:匹配出现在sequence里面的一个字符
[!sequence]:匹配没有出现在sequence里面的一个字符
[a-m]:匹配出现在abcdef...m中的字符
[A-M]:匹配出现在ABCDEF...M中的字符
[0-9]:匹配出现在0123...9中的字符

基础功能

匹配文件最经典的 *.txt
以反斜杠结尾,则只匹配目录(而非文件)。

后来的某个版本开始,bash支持 globstar ,即支持**运算符,匹配 “无” 或任意层级的目录。

bash4发布globstar的文章 May 11, 2010。
https://www.linuxjournal.com/content/globstar-new-bash-globbing-option

Normally when you use **, it works similar to *, but it’s recurses all the directories recursively (like a loop).

注意bash中这个功能需要主动开启。

Python

函数定义

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

1.root_dir

其中root_dir可以省略。
如果不为None会拼在pathname前面。

即下面两种写法在搜索上是等价的

glob.glob('/home/user/*.txt')
glob.glob('*.txt',root_dir='/home/user')

区别:

glob.glob('/home/user/*.txt')

返回

[ '/home/user/1.txt', '/home/user/2.txt']

glob.glob('*.txt',root_dir='/home/user')

返回

[ '1.txt', '2.txt']

2. recursive

在python glob模块中,默认关闭递归模式。
当且仅当设置recursive=True时,才会识别**符号。

import glob
glob.glob('./exp/post/collect/**/*.csv',recursive=True)
glob.glob('./exp/post/collect/**/*.csv',recursive=False)

如图所示
在这里插入图片描述

在现代版本的node中, node-glob 模块默认开启对**的支持,无需任何其他设置。

注意**.py 只会匹配一级目录。
想递归任意深度得用**/*.py

3. with pathlib.Path

pathname部分仅支持string类型。
使用 pathlib库 会报错'PosixPath' object is not subscriptable.

可以用 PosixPath.glob(pattern)

即下面的写法是等价的

import glob
from pathlib import Path
#写法1
glob.glob('*.txt',root_dir='/home/user')
#写法2
root_dir = Path('/home/user')
root_dir.glob('*.txt') # 返回值是一个generator
list(root_dir.glob('*.txt')) # 我们熟悉的list

reference

https://unix.stackexchange.com/questions/49913/recursive-glob

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

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

相关文章

【解决】CSS下拉菜单不会显示的问题

导航栏的下拉菜单显示,但按 F5 刷新的一瞬间又能看见 下拉菜单的内容,但就是不会显示出来,一开始以为是 js 代码写错或者 css 的动画函数的影响,后面找到一篇博客,说这是老生常谈的问题,对于小白确实很难找…

移动应用数据安全性:如何防止应用程序被黑客攻击和数据泄露?

第一章:引言 在移动应用成为人们生活中不可或缺的一部分的今天,数据安全性已经成为一个非常重要的问题。随着黑客攻击和数据泄露事件的频繁发生,用户对于移动应用程序的信任度也在逐渐下降。本文将探讨移动应用数据安全性的重要性&#xff0…

chatgpt赋能Python-pythongpu加速

Python GPU加速:让你的Python应用飞速运行 介绍 Python是一种高级编程语言,具有易于学习、易于使用和强大的功能。作为一门解释型语言,Python会在运行时逐行解释程序代码,而这种解释方式会导致Python在运行速度上较慢。在需要大…

2023上半年软考系统分析师科目一整理-01

2023上半年软考系统分析师科目一整理-01 1. 面向对象2. UML 1. 面向对象 面向对象分析中,对象是类的实例。对象的构成成分包含了(A),属性和方法(或操作)。 A.标识 B.消息 C.规则 D.结构 对象的三要素为&am…

linux服务器安装python环境配置

linux服务器安装python环境配置 服务器跳板机服务器配置配置anaconda环境安装其他python版本卸载anaconda root用户为用户添加权限其他工具Jupyter Noetbooktmux 服务器跳板机 跳板机是一个可以从公共网络访问的服务器,它允许用户通过 SSH 连接进入私有网络中的其他…

AI绘画-Midjourney基础2-创意之旅启航:超强二次元风格模型 niji 5

niji 模型是 mj 的一种模型,可以生成二次元风格的图片。 在控制台输入 /settings 指令,进入设置页面。 选择第二行的 Niji version 5 模型,就可以创作二次元风格的图片了! niji 5 模型还有 expressive、cute、scenic 3种风格可以…

【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

chatgpt赋能Python-pythongroup

PythonGroup:提高Python技能和构建社交网络的绝佳平台 PythonGroup是一家致力于为Python编程者提供高质量资源和社交网络的平台。无论您是新手还是有十年以上的经验,PythonGroup都可以帮助您提高您的技能,增加您的知识和职业发展机会。 Pyt…

t检验与Z检验的区别

在统计学中,假设检验是评估某种特定情况下观察到的数据是否符合假设的一种方法。t检验和Z检验是两种常用的假设检验方法,分别用于比较均值差异以及比例差异。在医学统计中,t检验和Z检验经常被用于研究和比较不同治疗方法的效果,例…

chatgpt赋能Python-pythonfor遍历列表

Python for循环:遍历列表 - 提高您的编程技能 列表是Python编程语言中广泛使用的数据结构。在许多情况下,我们需要遍历列表中的元素。Python中的for循环是一种最常用的遍历列表的方式。在本文中,我们将介绍如何使用Python的for循环语句遍历列…

SSRS rdlc报表之创建报表 一

环境 vs2019 fromwork4.5 第一步 安装rdlc报表插件 vs2019使用rdlc,需要安装扩展插件,扩展→扩展管理→联机,搜索rdlc,安装Microsoft RDLC Report Designer,我在安装过程中,安装了很久都没安装成功&…

一、数据字典介绍

文章目录 一、数据字典介绍1、页面效果2、表设计3、数据分析4、根据页面效果分析数据接口 一、数据字典介绍 何为数据字典?数据字典就是管理系统常用的分类数据或者一些固定数据,例如:省市区三级联动数据、民族数据、行业数据、学历数据等&a…

Spring Boot系列(一):Spring Boot 入门篇

目录 对于学习Java的童鞋来说,可都是有用的博文,也是我悉心选择推荐给大家的。这次为大家带来的系列文章是关于Spring Boot的,Spring Boot对Javaer来说应该是很常用的一个框架。希望这个系列能对大家有用!​编辑 快速入门 总结 …

C语言的位运算

1. 位操作符综述 位操作有逻辑运算和移位运算,如位与、位或、位取反、按位异或、移位等操作。位运算通常会和底层代码寄存器的操作结合在一起使用,比如想要让寄存器中的任意1位或者任意几位位设置为1,或者设置为0,从而实现对寄存…

chatgpt赋能Python-pythongame怎么样

Python Game:打造属于自己的游戏 Python是一种全球流行的编程语言,因其简洁易懂、高效稳定,被广泛应用于各类软件、网站与游戏的开发领域。其中,Python Game成为许多开发者的关注焦点,不同于传统游戏开发的复杂与繁琐…

【音视频开发】摄像头和ISP的基本介绍

文章目录 一、摄像头的基本知识1.1 摄像头结构1.2 摄像头模组的种类1.3 摄像头的工作原理 二、Sensor的基本知识2.1 Sensor的工作原理2.2 Sensor的分类2.3 Sensor的封装形式2.4 常见的Sensor厂商2.5 Sensor的基本框图 三、ISP的基本知识3.1 ISP的定义3.2 ISP的工作原理 四、ISP…

拥抱生成式大模型 --- 提示工程篇

本文为系列的第二篇,主要是学习和总结chatgpt类模型的提示工程。感谢吴恩达老师的开源课程。 引言 随着大型语言模型(LLM)的发展,LLM 大致可以分为两种类型,即基础LLM和指令微调LLM。基础LLM是基于文本训练数据&…

栈和队列 - C语言实现

目录 栈 栈的概念 栈的实现 队列 队列的概念 队列的实现 栈 栈的概念 栈是一种后进先出 (LIFO - last in first out) 的数据结构,通常利用数组或链表实现。栈只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另…

JavaWeb14 - 异步请求 - 02 - Ajax

1. 概述 1.1 官方文档 Ajax 在线文档:https://www.w3school.com.cn/js/js_ajax_intro.asp 1.2 Ajax 基本介绍 1.2.1 Ajax 是什么 AJAX 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML)Ajax 是一种浏览器异步发起请求(指定发哪些数据)&…

LeetCode刷题集(七)(LeetCode70.爬楼梯)

学习目标:拿下LeetCode70.爬楼梯 学习完本文章之后拿下LeetCode70题 题目实例: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 样例1、输入:n 2 输出&#xff1…