Python开发Day05

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python开发Day05相关的知识,希望对你有一定的参考价值。

Python正则表达式:

  • 简介:

    • Python本身是没有正则表达式的,他是通过re模块来实现的。

    • Python的正则表达式(或 RE)是一种小型的、高度专业化的编程语言,它内嵌在Python中,并通过 re 模块实现。

  • 字符匹配

    • 元字符
      • . 通配符,除了换行符以外的任何字符,
        技术分享
        >>> re.findall(hell..word,hello word)
        [hello word]
      • ^ 在字符串的开头满足条件。
        技术分享
        >>> re.findall(^hello,hello Wu,hello)
        [hello]
      • $ 在字符串的结尾满足条件。
        技术分享
        >>> re.findall(hello$,hello Wu,hello)
        [hello]
      • * ,重复出现0到多次,默认贪婪匹配,贪婪匹配就是从头匹配到结尾。

        技术分享
        >>> re.findall(hello*,hellooooooooooasd)
        [helloooooooooo]
      • + 重复出现1到多次。
        技术分享
        >>> re.findall(hello+,hellooo)
        [hellooo]
        >>> re.findall(hello+,hell)
        []
      • ? 出现0次或者1次。
        技术分享
        >>> re.findall(hello?,hell)
        [hell]
        >>> re.findall(hello?,hello)
        [hello]
        >>> re.findall(hello?,helloo)
        [hello]
      • 字符集:
        • {} 匹配次数。
          技术分享
          >>> re.findall(hello{1,3},helloo)#{}匹配1,3次
          [helloo]
          >>> re.findall(hello{1,3},helloooooo)
          [hellooo]
        • [] 或者的意思[a-z]#匹配a-z的字母或者数字1-9、A-Z。[^a-z]#匹配不是小写字母a-z的字符。[\\d]也可以使用
          技术分享
          >>> re.findall(hel[lo]x,helox)#匹配hellx或者helox
          [helox]
        • () 和数学上的括号是一样的,属于组的概念。
          re.findall(r"(ab)*","aba")或者re.search(ra(\\d+),a234234njka),可以再a(\\d+?)
        • |,也是或者的意思,具体看代码。
          技术分享
          >>> re.findall("a|c","aba")
          [a, a]
        • \\ 后面跟元字符就回去掉元字符的特殊功能,后面跟的普通字符实现特殊功能,在字符集中还是可以适应的
          • \\2 #印用序号对应的组进行组成字符串
          • \\d #匹配任何十进制的数(匹配一个)
          • \\D #匹配任何非数字的字符
          • \\w #匹配任何字母数字字符
          • \\W #匹配任何非字母的数字字符
          • \\s #匹配任何空白字符
          • \\S #匹配任何非空白字符
  • Python正则的命令:

    • findall(‘找的内容‘,‘字符串或变量‘)    他匹配到的结果以列表的方式返回 
      技术分享
      >>> re.findall(hello,asdkhfjlsadhhellosafsdf)
      [hello]
    • search(‘找的内容‘,‘字符串或变量‘)    找到一个符合标准的,多余的不再进行匹配,默认返回的是一个对象需要加.group()查看
      技术分享
      >>> re.search(hello,asdkhfjlsadhhellosafsdfhello).group()
      hello
    • match(‘规则‘,‘字符串‘,‘工作方式‘)    如果有结果会返回,如果没有结果返回None,默认返回的是一个对象需要加.group()查看

      技术分享
      >>> re.match(rblow, blow123nlow)
      <_sre.SRE_Match object; span=(0, 4), match=blow>
      >>> re.match(rblow, blow123nlow).group()
      blow

       

      • 工作方式有:
        • re.I    不区分大小写
        • re.L       做本地化识别(locale-aware)匹配
        • re.M      多行匹配,影响 ^ 和 $
        • re.S       使 . 匹配包括换行在内的所有字符
      • match方法有:
        • group()     返回匹配开始的位置
        • start()      返回匹配开始的位置
        • end()        返回匹配结束的位置
        • span()      返回一个元组包含匹配 (开始,结束) 的位置
        • groups()      返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。
    • sub(old,new,操作的字符串,替换次数)
      技术分享
      >>> re.sub("g.t","have",I get A,  I got B ,I gut C)
      I have A,  I have B ,I have C
    • subn()      和sub差不多一样,只不过替换完成后会告诉我们替换了多少次
      技术分享
      >>> re.subn("g.t","have",I get A,  I got B ,I gut C)
      (I have A,  I have B ,I have C, 3)
    • compile()  编译   
      技术分享
      p = re.compile(r\\d+)
      p.split(one1two2three3four4)
    • split(‘规则‘,‘字符串‘) 使用规则分割字符串
      技术分享
      >>> re.split(\\d+,one1two2three3four4)
      [one, two, three, four, ‘‘]

       

Python常用模块:

  • 介绍

    • 模块就是用很多代码的组合来实现某一个功能的代码集合
    • 模块类似函数式编程和面向过程编程,函数式的编程是为了完成一个功能,让其他代码来调用,提供个代码的重用性和代码间的耦合,对于一些负责的功能来说的话,那么就会需要很多的函数才能完成,一个或一个以上的.py文件才能组成代码集合就成为模块
  • 模块分为三种:

    • 自定义模块
    • 内置标准模块(又称标准库)
    • 开源模块
  • 自定义模块:

    • 自定义模块就是所谓的自己写一个.py文件在另一个.py文件中导入。
      技术分享
      #模块
      print(hello word)
      例(模块)
      技术分享
      import hello#导入模块hello
      print(Wu)
      执行结果:
      hello word
      Wu
      列(调用)
  • 模块导入方法:

    • Python为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:
      import module
      from module.xx.xx import xx
      from module.xx.xx import xx as rename   
      from module.xx.xx import *
    • 导入模块的过程就相当于是告诉Python去解释那个.py文件
      • 导入一个.py文件解释器解释该.py文件
      • 导入一个包,解释器解释这个包下面的__init__.py文件
    • 导入模块时的模块目录是怎么来进行找到模块文件的呢或者说是根据那个路径来进行的呢?这里我们可以使用sys.path
      技术分享
      import sys
      print(sys.path)
      执行结果:
      [F:\\\\oldboy-Python\\\\py_code\\\\test, F:\\\\oldboy-Python, C:\\\\Python35\\\\python35.zip, C:\\\\Python35\\\\DLLs, C:\\\\Python35\\\\lib, C:\\\\Python35, C:\\\\Users\\\\吴永奇\\\\AppData\\\\Roaming\\\\Python\\\\Python35\\\\site-packages, C:\\\\Python35\\\\lib\\\\site-packages]
      sys模块的path

       但是结果中没有我们要导入的模块的路径怎么办?这时候后我么可以使用sys.path.append(‘路径‘)来向寻找模块的路径中添加一个路径。

      技术分享
      import sys
      sys.path.append(F:\\\\oldboy-Python\\\\py_code)
      print(sys.path)
      执行结果:
      [F:\\\\oldboy-Python\\\\py_code\\\\test, F:\\\\oldboy-Python, C:\\\\Python35\\\\python35.zip, C:\\\\Python35\\\\DLLs, C:\\\\Python35\\\\lib, C:\\\\Python35, C:\\\\Users\\\\吴永奇\\\\AppData\\\\Roaming\\\\Python\\\\Python35\\\\site-packages, C:\\\\Python35\\\\lib\\\\site-packages, F:\\\\oldboy-Python\\\\py_code]
      View Code
  • 开源模块的下载和安装:

    • 我们怎么安装模块呢? 

      • 安装模块有两种方法提供:
        技术分享
        yum 
        pip
        apt-get
        ...
        方法一
        技术分享
        下载源码
        解压源码
        进入目录
        编译源码    python setup.py build
        安装源码    python setup.py install
        方法二
      • ps:在我们使用源码安装的时候,需要使用到gcc编译同时还需要Python的开发环境,所以需要先执行
        yum install gcc python-devel -y
        或者
        apt-get python-dev -y
      • 在模块安装完成后我们最好查看一个是否安装成功,安装成功的话会自动安装的sys.path中的某一个目录中,我们可以使用import 模块名 来看一下是否成功
    • 使用模块:

      • sys模块

        • sys.argv,命令行参数,第一个参数是程序本身的路径。
          技术分享
          import sys
          print(sys.argv)
          执行结果:
          F:\\oldboy-Python\\py_code\\test>python noke.py hello
          [noke.py, hello]
        • sys.exit(n),退出程序,我们可以定义退出时给用户一个提示。
          技术分享
          import sys
          sys.exit(Good bye!)
          执行结果:
          F:\\oldboy-Python\\py_code\\test>python noke.py hello
          Good bye!
        • sys.version,查看Python的版本信息。
          技术分享
          import sys
          print(sys.version)
          执行结果:
          3.5.1rc1 (v3.5.1rc1:948ef16a6951, Nov 22 2015, 23:41:41) [MSC v.1900 64 bit (AMD64)]
        • sys.maxint,取最大的int值,在Python3.*后是sys.maxsize。
          技术分享
          #Python2.7
          import sys
          print(sys.maxint)
          执行结果:
          2147483647
          
          
          #Python3.5
          import sys
          print(sys.maxsize)
          执行结果:
          9223372036854775807
        • sys.path,返回模块的搜索路径,初始化的时候使用PYTHONPATH环境变量的值。
          技术分享
          import sys
          print(sys.path)
          执行结果:
          [F:\\\\oldboy-Python\\\\py_code\\\\test, F:\\\\oldboy-Python, C:\\\\Python35\\\\python35.zip, C:\\\\Python35\\\\DLLs, C:\\\\Python35\\\\lib, C:\\\\Python35, C:\\\\Users\\\\吴永奇\\\\AppData\\\\Roaming\\\\Python\\\\Python35\\\\site-packages, C:\\\\Python35\\\\lib\\\\site-packages]
        • sys.platfrom,返回操作系统平台的名称

          技术分享
          import sys
          print(sys.platform)
          执行结果:
          win32
        • sys.stdout.write(‘内容‘),向屏幕打印内容。
          技术分享
          sys.stdout.write(please:)
          执行结果:
          please:
        • sys.stdin.readline(),
      • time模块

        • time.time(),当前时间的时间戳
          技术分享
          >>> time.time()
          1463652160.4625852
        • time.ctime(),用字符串格式输出当前时间
          技术分享
          >>> time.ctime()
          Thu May 19 18:05:20 2016
        • time.ctime(time.time()-86400),用字符串格式输出当前时间-86400秒
          技术分享
          >>> time.ctime(time.time()-86400)
          Wed May 18 18:05:40 2016
        • time.gmtime(time.time()-86400),将UTC时间戳转换成对象格式输出,并减去86400秒,默认是UTC时区
          技术分享
          >>> time.gmtime(time.time()-86400)
          time.struct_time(tm_year=2016, tm_mon=5, tm_mday=18, tm_hour=10, tm_min=6, tm_sec=10, tm_wday=2, tm_yday=139, tm_isdst=0)
        • time.localtime(time.time()),将本地时间戳转换成对象格式输出
          技术分享
          >>> time.localtime(time.time())
          time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=18, tm_min=6, tm_sec=41, tm_wday=3, tm_yday=140, tm_isdst=0)
        • time.mktime(time.localtime()),将时间对象转成时间戳
          技术分享
          1 >>> time.mktime(time.localtime())
          2 1463652428.0
        • time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()),将时间对象转成字符串格式
          技术分享
          >>> time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())
          2016-05-19 10:07:36
        • time.strptime("2016-01-28","%Y-%m-%d"),将字符串格式转换成时间对象
          技术分享
          >>> time.strptime("2016-01-28","%Y-%m-%d")
          time.struct_time(tm_year=2016, tm_mon=1, tm_mday=28, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=28, tm_isdst=-1)
      • datetime模块

        • datetime.date.today(),输出当前的年月日
          技术分享
          import datetime
          print(datetime.date.today())
          执行结果:
          2016-05-19
        • datetime.date.fromtimestamp(time.time()-86400),将时间戳转成日期格式,并且减86400秒
          技术分享
          import datetime,time
          print(datetime.date.fromtimestamp(time.time()-86400))
          执行结果:
          2016-05-18
        • datetime.datetime.now(),输出当前时间
          技术分享
          import datetime,time
          print(datetime.datetime.now())
          执行结果:
          2016-05-19 18:19:37.266536
        • datetime.datetime.now().timetuple(),输出当前时间并将其转换成时间对象
          技术分享
          import datetime,time
          print(datetime.datetime.now().timetuple())
          执行结果:
          time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=18, tm_min=20, tm_sec=16, tm_wday=3, tm_yday=140, tm_isdst=-1)
        • datetime.datetime.now().replace(2014,9,12),输出当前时间,但是指定的年月日会被替换
          技术分享
          import datetime,time
          print(datetime.datetime.now().replace(2014,9,12))
          执行结果:
          2014-09-12 18:20:49.646533
        • datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M"),原时间,指定原时间格式
          技术分享
          import datetime,time
          print(datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M"))
          执行结果:
          2006-11-21 16:30:00
        • datetime.datetime.now() + datetime.timedelta(days=10),比现在的时间加10天
          技术分享
          import datetime
          print(datetime.datetime.now() + datetime.timedelta(days=10))
          执行结果:
          2016-05-29 18:21:57.771363
        • datetime.datetime.now() - datetime.timedelta(days=10),比现在的时间减10天,或者days=-10也可以
          技术分享
          import datetime,time
          print(datetime.datetime.now() - datetime.timedelta(days=10))
          执行结果:
          2016-05-09 18:22:29.773631
        • datetime.datetime.now() + datetime.timedelta

以上是关于Python开发Day05的主要内容,如果未能解决你的问题,请参考以下文章

python3开发:目录

2018-5-22-Python全栈开发day9-Python开发课程简介part2

2018-5-21-Python全栈开发day9-Python开发课程简介part1

Python全栈-Day05

2018-07-05-Python全栈开发day25-python中的继承

Day05 - Python 常用模块