【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模块来完成。
【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配的更多相关文章
- python cookbook 字符串和文本
使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...
- Python: 去掉字符串中的非数字(或非字母)字符
>>> crazystring = ‘dade142.;!0142f[.,]ad’ 只保留数字>>> filter(str.isdigit, crazystring ...
- 利用shell脚本做一个用户登录系统
效果图如下: #!/bin/bash# while truedocat << EOF//======================\\\\| 用户登录系统 |-------------- ...
- 利用FFT来进行字符串匹配
给定串A和串B,A由26个小写字母构成,B由?和26个小写字母构成 ?可以和任意字符匹配 求A中出现了多少次B 这里可以使用fft做法,定义向量A和向量B 然后求A和rev(B)的卷积结果C C的第i ...
- python书籍推荐:Python Cookbook第三版中文
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...
- [转]python3字符串与文本处理
转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...
- python3字符串与文本处理
每个程序都回涉及到文本处理,如拆分字符串.搜索.替换.词法分析等.许多任务都可以通过内建的字符串方法来轻松解决,但更复杂的操作就需要正则表达式来解决. 1.针对任意多的分隔符拆分字符串 In [1]: ...
- Python3-Cookbook总结 - 第二章:字符串和文本
第二章:字符串和文本 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出. 这一章将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等. 大部分的问题都能简单的调用字符串的 ...
- [转载] python 计算字符串长度
本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...
随机推荐
- 微信去除 防欺诈盗号请勿支付或输入qq密码 以及 防欺诈或盗号请不要输入qq密码 的方法
本文介绍如何去除微信顶部的“防欺诈盗号,请勿支付或输入qq密码”.或 “防欺诈或盗号,请不要输入qq密码”如图所示. 一.微信认证 目前只有已经通过微信认证的账号可以去除这个提示.在公众账号下左 ...
- linux 安装apahce的configure: error: APR not found. Please read the documentation解决办法
1.下载所需软件包: 下载apr并配置 wget http://apache.freelamp.com/apr/apr-1.4.2.tar.gz 下载apr ./configure –prefix=/ ...
- Java 语句总结
一.替代if语句x = a ? b:c; 等价:if (a){ x=b;}else{x=c;}二.页面展示二维数组 <s:iterator var="rt" value=&q ...
- UCenter uc_user_synlogin同步登陆返回值为空(NULL)的解决办法 及 ucenter原理
第一种方法最近刚刚接触UCenter,很多问题不是很理解,只是在摸索着.尝试着做,就在刚才有解决了一个问题,虽然不知道解决问题的具体原理,但是还是实现了同步登陆.首先我是在本地测试的,也就是local ...
- 重新拷贝 新项目 发现不显示 原来是 paramiko 没有装
proxy pass 端口换成 另一个 跟原来的不冲突 [root@ayibang-server soft_ware]# cp s10day11/demo.* s10ops/[root@ayibang ...
- scp与rsync限速
一/scp限速1M #scp -l 1000 文件名 账号@远程机器IP此时的传输速率就是1M/8=100K左右 二/rsync是(限制为 100k Bytes/s): #rsync -auvzP-- ...
- git的简单使用
Git-csm.com 安装git http://www.git-scm.com/download [liujianzuo@mylab ~]$ yum install git 已加载插件:faste ...
- iPhone批量删除照片/视频最好用的方法
iPhone批量删除照片/视频最好用的方法 经过大量的搜索和不懈的尝试,今天终于找到了批量删除iPhone照片最好用的方法, 于是决定写一篇博客为更多的果粉们造福! 1. 通过USB将iPhone手机 ...
- 第十四篇 Integration Services:项目转换
本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...
- 【转】DataSource高级应用
我们知道 DataSource能提供最高性能的对数据库的并发访问,但是,对DataSource的引用,也还有很多知识要弄清楚,获取Connection的方式是数据库性能最相关的技术,而对DataSou ...