问题:当工作在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通配符做字符串匹配的更多相关文章

  1. python cookbook 字符串和文本

    使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...

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

    >>> crazystring = ‘dade142.;!0142f[.,]ad’ 只保留数字>>> filter(str.isdigit, crazystring ...

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

    效果图如下: #!/bin/bash# while truedocat << EOF//======================\\\\| 用户登录系统 |-------------- ...

  4. 利用FFT来进行字符串匹配

    给定串A和串B,A由26个小写字母构成,B由?和26个小写字母构成 ?可以和任意字符匹配 求A中出现了多少次B 这里可以使用fft做法,定义向量A和向量B 然后求A和rev(B)的卷积结果C C的第i ...

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

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...

  6. [转]python3字符串与文本处理

    转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...

  7. python3字符串与文本处理

    每个程序都回涉及到文本处理,如拆分字符串.搜索.替换.词法分析等.许多任务都可以通过内建的字符串方法来轻松解决,但更复杂的操作就需要正则表达式来解决. 1.针对任意多的分隔符拆分字符串 In [1]: ...

  8. Python3-Cookbook总结 - 第二章:字符串和文本

    第二章:字符串和文本 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出. 这一章将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等. 大部分的问题都能简单的调用字符串的 ...

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

    本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...

随机推荐

  1. http://blog.csdn.net/qiutongyeluo/article/details/52468081

    http://blog.csdn.net/qiutongyeluo/article/details/52468081

  2. robotframework数据驱动框架

    即将更新...............

  3. ApacheBench(ab)使用详解

    ab命令原理  Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.  ab命令对发出负载的计算机要求很低,既不会占 ...

  4. Java final,static 关键字

    final关键字: 这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的.final方法不能被子类 ...

  5. Unable to instantiate Action...............

    当时找了好久都没搞明白,出现这样的问题,可能不是代码错了.将新添加的action不要添加在末尾,这样可能导致这样的问题出现,所以新添加的action最好放置在struts配置文件中间.

  6. EBS R12.2安装,使用的操作系统用户

    在安装时,错误使用了oracle rdbms的对应的操作系统用户,导致安装前,验证时"web server install prerequisites"选项验证失败: (本图其它两 ...

  7. Leetcode: Longest Absolute File Path

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  8. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Lunch Time

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5499 The 12th Zhejiang Provincial ...

  9. [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  10. Python学习总结4:字符串常量与操作汇总

    参考博客:http://www.cnblogs.com/Camilo/archive/2013/09/21/3332267.html http://www.cnblogs.com/SunWentao/ ...