【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配

问题:当工作在Linux shell下时,使用常见的通配符模式(即,*.py、Dat[0-9]*.csv等)来对文本做匹配

解决方案:fnmatch模块提供的两个函数fnmatch()、fnmatchcase()

#fnmatch()的匹配模式所采用的大小写区分规则和底层文件系统相同(根据操作系统的不同 而不同)

#fnmatchcase()的匹配模式区分大小写

>>> from fnmatch import fnmatch,fnmatchcase
>>> fnmatch(‘foo.txt‘,‘.txt‘)
False
>>> fnmatch(‘foo.txt‘,‘*.txt‘)
True
>>> fnmatch(‘foo.txt‘,‘?oo.txt‘)
True
>>> fnmatch(‘Dat34.csv‘,‘Dat[0-9]*‘)
True
>>> names=[‘Dat34.csv‘,‘Dat1.csv‘,‘config.ini‘,‘foo.py‘]
>>> [name for name in names if fnmatch(name,‘Dat*.csv‘)]
[‘Dat34.csv‘, ‘Dat1.csv‘]
>>> 
>>> fnmatch(‘foo.txt‘,‘*.TXT‘)#ON WINDOWS 大写字母匹配
True
>>> fnmatchcase(‘foo.txt‘,‘*.TXT‘)#on windows大写字母匹配False>>>
>>> fnmatch(‘foo.txt‘,‘*.TXT‘)#ON OS X(Mac)  大写字母匹配
False
>>> 

这些函数一个潜在的用途,是它们处理非文件名式的字符串时的特性

# example.py
#
# Example of using shell-wildcard style matching in list comprehensions

from fnmatch import fnmatchcase as match

addresses = [
    ‘5412 N CLARK ST‘,
    ‘1060 W ADDISON ST‘,
    ‘1039 W GRANVILLE AVE‘,
    ‘2122 N CLARK ST‘,
    ‘4802 N BROADWAY‘,
]

a = [addr for addr in addresses if match(addr, ‘* ST‘)]
print(a)

b = [addr for addr in addresses if match(addr, ‘54[0-9][0-9] *CLARK*‘)]
print(b)
>>> ================================ RESTART ================================
>>>
[‘5412 N CLARK ST‘, ‘1060 W ADDISON ST‘, ‘2122 N CLARK ST‘]
[‘5412 N CLARK ST‘]
>>> 

实际上是想编写匹配文件名的代码,应该使用glob模块来完成。

时间: 2024-08-26 12:02:03

【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配的相关文章

Python实用技法第22篇:利用Shell通配符做字符串匹配

1.需求 当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配. 2.解决方案 fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单. 实例: from fnmatch import fnmatch,fnmatchcase print(fnmatch('mark.txt','*.txt')) print(fnmatch('mark.txt','?ark.txt'))

python cookbook 字符串和文本

使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) print(re.split(r'(;|,|\s)\s*', line)) #加括号表示捕获分组,这样匹配的结果也显示在列表中 匹配开头或结尾 url = 'http://www.python.org' print(url.startswith(('http', 'https', 'ftp')))

Python: 去掉字符串中的非数字(或非字母)字符

>>> crazystring = ‘dade142.;!0142f[.,]ad’ 只保留数字>>> filter(str.isdigit, crazystring)‘1420142′ 只保留字母>>> filter(str.isalpha, crazystring)‘dadefad’ 只保留字母和数字>>> filter(str.isalnum, crazystring)‘dade1420142fad’ 如果想保留数字0-9和小数点

利用shell脚本做一个用户登录系统

效果图如下: #!/bin/bash# while truedocat << EOF//======================\\\\| 用户登录系统 |--------------------------| 1.创建用户 || 2.删除用户 || 3.锁定用户 || 4.解锁用户 || 5.查看用户 || 6.退出脚本 |--------------------------EOF read -p "请输入你的操作选择:" num#输入为1时的判断if [ "

Python Cookbook(第3版)中文版pdf

下载地址:网盘下载 内容简介  · · · · · · <Python Cookbook(第3版)中文版>介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字.日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试.调试以及异常,C语言扩展等. 本书覆盖了Python应用中的很多常见问题,并提出了通用的解决方案.书中包含了大量实用的编程技巧和示例代码,并在Py

python书籍推荐:Python Cookbook第三版中文

所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容简介 <Python Cookbook(第3版)中文版>介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字.日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测

AWK文本处理增强shell功能--AWK完全手册

AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一. 本文主要摘录池中龙写的Unixawk使用手册(第二版),对其中内容稍微改动.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与判断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1if...e

[转载] python 计算字符串长度

本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函数取得的长度,进行对比即可知道字符串内中文字符的数量,自然就可以计算出字符串的长度了. value=u'脚本12' length = len(value) utf8_length = len(value.encode('utf-8')) length = (utf8_length - length)

正则表达式的使用,字符串提取,字符串匹配(C#语言)

在程序中常常设计字符串的处理,比如①:判断用户的输入字符串是否符合要求,是否是非法字符串,②:取出一个很复杂字符串的某一程序中需要的部分等 这事用自己写算法判断通常是十分困难的,所以遇到字符串的处理时要很快想到用正则表达式. 一:正则表达式元字符 •要想学会正则表达式,理解元字符是一个必须攻克的难关.不用刻意记 •.:匹配任何单个字符.例如正则表达式“b.g”能匹配如下字符串:“big”.“bug”.“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”. •[ ] :匹配括号中的