python 学习之glob、dir、getattr、callable、正则表达式
来源:互联网 发布:ubuntu的cp命令 编辑:程序博客网 时间:2024/06/06 07:04
python语言含有丰富的语法规则和简洁实用的表达方式,opencv与python的结合可以做很多事情,opencv2.4.10所带的python实例中有部分程序,阅读实例的同时可以学习到优美的python语法,其中第一个程序_converage如下:
from glob import globimport cv2import reif __name__ == '__main__': cv2_callable = set(['cv2.'+name for name in dir(cv2) if callable( getattr(cv2, name) )]) found = set() for fn in glob('*.py'): print ' --- ', fn code = open(fn).read() found |= set(re.findall('cv2?\.\w+', code)) cv2_used = found & cv2_callable cv2_unused = cv2_callable - cv2_used with open('unused_api.txt', 'w') as f: f.write('\n'.join(sorted(cv2_unused))) r = 1.0 * len(cv2_used) / len(cv2_callable) print '\ncv2 api coverage: %d / %d (%.1f%%)' % ( len(cv2_used), len(cv2_callable), r*100 ) print '\nold (cv) symbols:' for s in found: if s.startswith('cv.'): print s该程序计算的是API的覆盖范围并且计算了旧版本的opencv函数在所有python_opencv程序中使用的范围。直接运行可以得到如下:
程序解析如下:
1.glob
glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。第9行中for fn in glob('*.py')就是寻找以.py结尾的所有文件。在cmd中使用python可以查看glob模块的使用方法。
glob.glob
返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。下面是使用glob.glob的例子:
import glob #获取指定目录下的所有图片 print glob.glob(r"E:\Picture\*\*.jpg") #获取上级目录的所有.py文件 print glob.glob(r'../*.py') #相对路径
glob.iglob
获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而 glob.iglob一次只获取一个匹配路径。这有点类似于.NET中操作数据库用到的DataSet与DataReader。下面是一个简单的例子:
import glob #父目录中的.py文件 f = glob.iglob(r'../*.py') print f #<generator object iglob at 0x00B9FF80> for py in f: print py
2.dir
dir()不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
本例中dir(cv2)即获取cv2模块中的信息,在cmd中可以做如下测试:
import cv2dir()dir(cv2)可以看到输出结果如下:
最后输出的是所有cv2中模块的名字。
另外的应用实例如下,可以帮助理解:
>>> dir()['__builtins__', '__doc__', '__name__', '__package__']>>> import struct>>> dir()['__builtins__', '__doc__', '__name__', '__package__', 'struct']>>> dir(struct)['Struct', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', 'unpack', 'unpack_from']>>> class Person(object):... def __dir__(self):... return ["name", "age", "country"]...>>> dir(Person)['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__','__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']>>> tom = Person()>>> dir(tom)['age', 'country', 'name']3.getattr
getattr用于获取对象引用,使用实例如下:
class A: def __init__(self): self.name = 'zhangjing' #self.age='24' def method(self): print"method print" Instance = A() print getattr(Instance , 'name, 'not find') #如果Instance 对象中有属性name则打印self.name的值,否则打印'not find'print getattr(Instance , 'age', 'not find') #如果Instance 对象中有属性age则打印self.age的值,否则打印'not find'print getattr(a, 'method', 'default') #如果有方法method,否则打印其地址,否则打印default print getattr(a, 'method', 'default')() #如果有方法method,运行函数并打印None否则打印default程序第6行中的程序getattr(cv2, name),获取cv2模块中的信息
4.callable(object)
检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功
方便理解函数的实例如下:
>>> callable(0)False>>> callable("mystring")False>>> def add(a, b):… return a + b…>>> callable(add)True>>> class A:… def method(self):… return 0…>>> callable(A)True>>> a = A()>>> callable(a)False>>> class B:… def __call__(self):… return 0…>>> callable(B)True>>> b = B()>>> callable(b)True5.正则表达式
import re是python中特有的正则表达式模式。正则表达式是搜索具有一定格式的字符表达式,正则表达式有着特殊de符号含义,使用规则比较复杂,这里只解释程序中提到的几项
首先是re.findall
>>> import re >>> s = "adfad asdfasdf asdfas asdfawef asd adsfas " >>> reObj1 = re.compile('((\w+)\s+\w+)') >>> reObj1.findall(s) [('adfad asdfasdf', 'adfad'), ('asdfas asdfawef', 'asdfas'), ('asd adsfas', 'asd')] >>> reObj2 = re.compile('(\w+)\s+\w+') >>> reObj2.findall(s) ['adfad', 'asdfas', 'asd'] >>> reObj3 = re.compile('\w+\s+\w+') >>> reObj3.findall(s) ['adfad asdfasdf', 'asdfas asdfawef', 'asd adsfas']
findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,此处主要讨论列表中“结果”的展现方式,即findall中返回列表中每个元素包含的信息。
上述实例的区别详细解释如下:
@1.当给出的正则表达式中带有多个括号时,列表的元素为多个字符串组成的tuple,tuple中字符串个数与括号对数相同,字符串内容与每个括号内的正则表达式相对应,并且排放顺序是按括号出现的顺序。
@2.当给出的正则表达式中带有一个括号时,列表的元素为字符串,此字符串的内容与括号中的正则表达式相对应(不是整个正则表达式的匹配内容)。
@3.当给出的正则表达式中不带括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容。
正则表达式的符号匹配含义部分如下所示:参考文章:
http://www.cnblogs.com/zhangjing0502/archive/2012/05/16/2503702.html
http://www.pythontab.com/html/2013/hanshu_0221/244.html
http://blog.csdn.net/cashey1991/article/details/8875213
http://blog.csdn.net/csapr1987/article/details/7469769
- python 学习之glob、dir、getattr、callable、正则表达式
- 学习python之 glob模块
- Python学习之正则表达式
- python学习之 正则表达式
- python学习之正则表达式
- python学习之正则表达式
- python之glob模块
- python获取对象信息type、dir、getattr、setattr
- Python 正则表达式之 补充学习笔记
- python学习之(五)正则表达式
- 学习PYTHON 之 松散正则表达式
- python学习之正则表达式笔记
- Python之学习笔记(正则表达式)
- python之正则表达式的学习
- python学习之正则表达式应用
- python学习之2 正则表达式re
- python学习笔记之正则表达式1
- Python基础学习之re正则表达式
- C++文件读写
- IOS8下UIView下的TableView从UINavigationController中POP出来后crash
- 超级好用的Android日志工具类
- mvn 常用的命令
- iOS中3种正则表达式的使用与比较
- python 学习之glob、dir、getattr、callable、正则表达式
- sendmessage 发送字符串
- 信号量和互斥锁
- iOS中http请求使用cookie
- 短信验证码通道相关误区
- 金额相关的操作
- apk格式分析及逆向
- Android判断程序是否在前台运行
- 团购app