Python学习系列(六)(模块)


一,模块的基本介绍

1,import引入其他标准模块

标准库:Python标准安装包里的模块。

引入模块的几种方式:

i)引入模块:import moduleName

ii)引入模块下的函数:from moduleName import function1,function2,……

iii)引入模块下的所有函数:from moduleName import *

使用模块里的函数的方法:

moduleName.function(agrs)

示例:

>>> import math
>>> r=math.sqrt(16)
>>> print r
4.0

如果模块或者函数名字过长可以在import后使用as给该模块取别名,之后可以通过“别名.函数”使用模块里的函数。

示例:

>>> import webbrowser as web
>>> web.open_new_tab('http://www.cnblogs.com')
True

2,使用自定义模块

testfile.py下:

def readfile():
    fr=open('wformat.txt','r')
    while (1==1):
        line=fr.readline()
        if(line==''):
            break
        else:
            print line
    fr.close()

test.py下:(与testfile.py同在一个目录文件里面)

import testfile
testfile.readfile()

结果如图:

>>>
      name	 age	 sex

      张三	 78	 male

      李四	 50	 male

      王五	 80	 male

      张强	 90	 female

调用层次结构:

\

如果被调用模块程序与模块程序不在同一个目录文件下,则需要调用os.path.append(模块文件所在的目录)

注意:.pyc是模块字节码文件,在使用模块是Python解释器需要把模块加载到系统里,若发现.py比.pyc新,则需要重新编译生成.pyc,否则不需要。文件.pyc是在第一次加载模块文件时完成的。

3,使用模块示例Json模块

1)Python下使用dumps函数可以将Python数据字典转换成Json数据结构。

\

示例:

import json
s=[{'f':(1,3,5,'a'),'x':None}]
d=json.dumps(s)
print d

结果如图:

>>>
[{"x": null, "f": [1, 3, 5, "a"]}]

2)Json数据转换Python数据,解码loads(对应关系如上表)

二,正则模块re

1)正则表达式的常见应用:

  • 验证字符串:如合法的邮件地址,HTTP地址等。

  • 查找字符串

  • 替换字符串

  • 提取字符串

    2)基本概念:

    正则表达式:是一段文本或者一个公式,用来描述用某种模式去匹配一类字符串的公式,并且该公式具有一定的模式。

    匹配:给定一段文本或者字符串,使用正则表达式从文本或字符串中查找出符合正则表达式的字符串。有可能文本或字符串存在不止一个部分满足给定的正则表达式,这是每一个这样的部分被称为一个匹配。

    元字符:一次只能匹配一个字符或者一个位置。故元字符分:匹配字符的元字符和匹配位置的元字符。

    i)匹配字符的元字符

    • ^string:匹配所有以string字符串开始的行

    • string$:匹配所有以string字符串结尾的行

    • $^:匹配空行

    • \bStr:\b匹配以Str开始的单词(等价于\<)

    • Str\b:\b匹配以Str结尾的单词(等价于\>)

      ii)匹配位置的元字符

      • \w:匹配单词里字符(字母,数字和下划线)

      • \W:匹配单词里非字符

      • \d:匹配单词里数字

      • \D:匹配单词里非数字

      • \s:匹配单词里空格字符

      • \S:匹配单词里非空格字符

        示例:

        >>> import re
        >>> s='Hello www.jeapedu.com'
        >>> res=r'\bjea'
        >>> print re.findall(res,s)
        ['jea']
        >>> res=r'jea\b'
        >>> print re.findall(res,s)
        []
        >>> res=r'edu\b'
        >>> print re.findall(res,s)
        ['edu']
        
        import re
        s='''
        ahello
        www.baidu.com
        hello world
        
        nice hellod world
        piece of helloe world
        '''
        res=r'\hello'
        print 'hello:',re.findall(res,s) 
        >>> ================================ RESTART ================================
        >>>
        hello ['hello', 'hello', 'hello', 'hello']
        
        import re
        s='a1b2c3d'
        res='\w\d'
        print re.findall(res,s)
        res='\w\d\w'
        print re.findall(res,s)
        >>> ================================ RESTART ================================
        >>>
        ['a1', 'b2', 'c3']
        ['a1b', 'c3d']
        

        字符集:用方括号括起来的字符集合,如果其中的任何一个字符被匹配,则它就会找到该匹配项,反字符集可在字符前加^。

        示例:

        import re
        s='''Plz write a mail to zhangbocheng189@163.com
        or 649414754@qq.com,thanks!'''
        res=r'\w[\w\.-]+@[\w\.-]+\.\w{2,4}'
        #*表示匹配0次及其以上,+表示匹配1次及以上。
        print re.findall(res,s) 
        
        >>> ================================ RESTART ================================
        >>>
        ['zhangbocheng189@163.com', '649414754@qq.com']
        

        分组或子模式:把一个正则表达式的全部或者部分分成一个或多个组。其中,分组使用的字符是“(”和“)”。

        示例:

        import re
        s='''www.baidu.comwww.BaidU.comwww.bAIDU.comwww.baidu.comwww.Baidu.com'''
        res1=r'(b|B)\w*(u|U)'
        #*表示匹配0次及其以上,+表示匹配1次及以上。
        res2=r'[bB]\w*(u|U)'
        res3=r'[bB]\w*[uU]'
        print res1+':'
        print re.findall(res1,s)
        print res2+':'
        print re.findall(res2,s)
        print res3+':'
        print re.findall(res3,s) 
        
        >>> ================================ RESTART ================================
        >>>
        (b|B)\w*(u|U):
        [('b', 'u'), ('B', 'U'), ('b', 'U'), ('b', 'u'), ('B', 'u')]
        [bB]\w*(u|U):
        ['u', 'U', 'U', 'u', 'u']
        [bB]\w*[uU]:
        ['baidu', 'BaidU', 'bAIDU', 'baidu', 'Baidu']
        

        限定符:用于指定允许特定字符或字符集自身重复出现的次数。

        • (pattern)?:重复0次或者1次,等价于{0,1}

        • (pattern)*:至少重复0次,等价于{0,}

        • (pattern)+:至少重复1次,等价于{1,}

        • (pattern){m:n}:重复至少m次,至多m次

        • (pattern)??:使用重复0次或者1次

        • (pattern)*?:尽可能少地使用重复的第一个匹配

        • (pattern)+?:尽可能少地使用重复但至少使用一次

          示例:

          import re
          s='''Tell to me 110-123-1114119 or call 4008-6688-9988
             or 13306247965'''
          res=r'\d+\D\d+\D\d+'
          #*表示匹配0次及其以上,+表示匹配1次及以上。
          res1=r'\d{11}'
          print re.findall(res,s)
          print re.findall(res1,s)
          
          >>> ================================ RESTART ================================
          >>>
          ['110-123-1114119', '4008-6688-9988']
          ['13306247965']
          

          通配符:匹配限定长度的字符串,例如点号匹配任意一个字符。

          转义字符:(详见:Python学习系列(三)(字符串)

          3)应用举例:

          import re
          s='hello www.baidu.com'
          print '----------------compile--------------------'
          res='[\s\.]'
          pat=re.compile(res)
          print pat.findall(s)
          print pat.split(s)
          print '----------------split--------------------'
          res='[\s\.]'
          print re.findall(res,s)
          print re.split(res,s) 
          
          >>> ================================ RESTART ================================
          >>>
          ----------------compile--------------------
          [' ', '.', '.']
          ['hello', 'www', 'baidu', 'com']
          ----------------split--------------------
          [' ', '.', '.']
          ['hello', 'www', 'baidu', 'com']
          

          三、小结

          本章主要介绍python开发的进阶知识,模块及其正则的相关知识,正则表达式是编程的一个很重要的知识点,需多多研究。

          额外补充一点小知识:

          1,sys模块:包含了与Python的解释器和它的环境有关的函数。

          import sys
          for i in sys.argv:
              print i
          
          >>>
          D:\Python学习\pythontest\test.py
          

          2,dir函数:列举模块定义的标识符,如函数、类和变量。当为dir提供一个模块名称的时候,返回模块定义的名称列表,否则返回当前模块中定义的名称列表。

          >>> import sys
          >>> dir()
          ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'i', 'sys']
          >>> a=5
          >>> dir()
          ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'i', 'sys']
          >>> del a   #删除一个变量/名称
          >>> dir()
          ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'i', 'sys']

评论关闭