python 学习之glob、dir、getattr、callable、正则表达式
2015-09-07 10:07
671 查看
python语言含有丰富的语法规则和简洁实用的表达方式,opencv与python的结合可以做很多事情,opencv2.4.10所带的python实例中有部分程序,阅读实例的同时可以学习到优美的python语法,其中第一个程序_converage如下:
程序解析如下:
1.glob
glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。第9行中for fn in glob('*.py')就是寻找以.py结尾的所有文件。在cmd中使用python可以查看glob模块的使用方法。
glob.glob
返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。下面是使用glob.glob的例子:
glob.iglob
获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而 glob.iglob一次只获取一个匹配路径。这有点类似于.NET中操作数据库用到的DataSet与DataReader。下面是一个简单的例子:
2.dir
dir()不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
本例中dir(cv2)即获取cv2模块中的信息,在cmd中可以做如下测试:
最后输出的是所有cv2中模块的名字。
另外的应用实例如下,可以帮助理解:
getattr用于获取对象引用,使用实例如下:
4.callable(object)
检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功
方便理解函数的实例如下:
import re是python中特有的正则表达式模式。正则表达式是搜索具有一定格式的字符表达式,正则表达式有着特殊de符号含义,使用规则比较复杂,这里只解释程序中提到的几项
首先是re.findall
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
from glob import glob import cv2 import re if __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 cv2 dir() 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 输入输出
- python metaclass
- python 读取mat文件
- python杀死一个线程的方法
- 基python实现多线程网页爬虫
- 尝试使用python做一个网页爬虫
- 第一次尝试使用python读写Excel文件
- python Beautiful Soup库
- python语法
- python 库文件
- Python 定时器 timer
- Python 图像操作
- 详细记录python的range()函数用法
- leetcode Find Minimum in Rotated Sorted Array II python
- type对象及内置对象陷阱
- 零基础学python-11.5 真值测试与if...else...三元表达式
- 零基础学python-11.5 真值测试与if...else...三元表达式
- python风味之大杂烩
- Python 系统管理利器Fabric
- python风味之list创建