Glob 文件匹配

news/2024/11/24 10:16: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.ppmy.cn/news/75991.html

相关文章

Spark大数据处理讲课笔记---Spark RDD典型案例

零、本节学习目标 利用RDD计算总分与平均分利用RDD统计每日新增用户利用RDD实现分组排行榜 一、利用RDD计算总分与平均分 (一)提出任务 针对成绩表,计算每个学生总分和平均分 (二)实现思路 读取成绩文件&#xff…

java实现url链接的补全,获取到的链接是以/或 ./ 开头的相对链接,不是以http开头的,需要补全

一、实现的目标 在使用爬虫获取网页html数据时,解析到的链接是/或./ 开头的相对链接,不是以http开头的链接,如:/picture/0/cca65350643c441e80d390ded3975db0.png 。此时需要完成对该链接的补全,以得到正确的链接。 二、实现思路 对比完整的url链接和相对链接,进行分析,…

自动化测试框架搭建步骤教程

说起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测试…

WebLogic:如何查看补丁版本

可以使用 /weblogic/bea/OPatch/下的opatch命令: /opatch lsinventory 执行结果: VOlogiciEDSP-APP-D-269:/opatch lsinventory Oracle Interim Patch Installer version 13.9.4_2_8 Copyright (c) 2023, Oracle Corporation. All rights reserved. Orac…

PHP程序员在外包公司的工作内容是什么,我来跟大伙聊一聊

今天呢,我要跟大家说一下,我在上班的主要工作内容。希望能为大家提供一些参考,让大家了解在外包公司,PHP程序员主要做些什么工作。 我们还会涉及到其他项目,比如Web开发、移动应用开发、数据分析和处理等。不同的项目…

群岛大战(C++)

群岛大战 英文题目:Problem StatementConstraintsInputOutputSample 1InputOutput Sample 2InputOutput Sample 3InputOutput 中文题目:问题陈述约束输出样本1输入输出 样本2输入输出 示例3输入输出 代码 英文题目: Problem Statement Ther…

一文把 JavaScript 中的 this 聊得明明白白

文章目录 1.this 是什么?2.this的指向2.1 全局上下文的 this 指向2.2 函数(普通函数)上下文中的 this 指向2.3 事件处理程序中的 this 指向2.4 以对象的方式调用时 this 的指向2.5 构造函数中的 this 指向2.6 在 类上下文中 this 的指向。2.7…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数(KeyedProcessFunction)1.处理…