zoukankan      html  css  js  c++  java
  • day05

    1.递归

    利用递归实现阶乘(1*2*3*4*5*6*7)

    def func(num):
        if num == 1:
            return 1
        return num * func(num-1)
    
    x = func(7)
    print(x)
    

     2.反射

    利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员

    getattr()

    setattr()

    hasattr()

    delattr()

    import commons
    inp = input('请输入url:')
    if hasattr(commons, inp)
        func = getattr(commons,inp)
        func()
    else:
        print('404')
    

     __import__()

    __import__('lib.' + m, fromlist=True)

    3.特殊变量

    __name__:只有执行当前文件时,当前文件的特殊变量__name__ == "__main__"

    __doc__:文件的文档

    __file__:当前文件的路径,相对路径

     4.sys模块

    sys.path:返回一个列表,包含python环境变量

    sys.platform:返回操作系统平台名称

    进度条:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import sys
    import time
    
    
    def view_bar(num, total):
        rate = num / total
        new_rate = int(rate * 100)
        r = '
    %s>%d%%' % ('='*num, new_rate)  # 
    清除当前行第一个位置的内容,回到第一个位置
        sys.stdout.write(r)  # 相当于print,print打印默认带
    换行,sys.stdout.write()不带换行符
        sys.stdout.flush()
    
    
    def main():
        for i in range(101):
            time.sleep(0.1)  # 暂停0.1秒
            view_bar(i, 100)
    
    
    if __name__ == '__main__':
        main()
    

    5.os模块

    简单用法

    os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
    os.curdir                   返回当前目录: ('.')
    os.pardir                   获取当前目录的父目录字符串名:('..')
    os.makedirs('dir1/dir2')    可生成多层递归目录
    os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()                 删除一个文件
    os.rename("oldname","new")  重命名文件/目录
    os.stat('path/filename')    获取文件/目录信息
    os.sep                      操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep                  当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep                  用于分割文件路径的字符串
    os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")   运行shell命令,直接显示
    os.environ                  获取系统环境变量
    os.path.abspath(path)       返回path规范化的绝对路径
    os.path.split(path)         将path分割成目录和文件名二元组返回
    os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path)      返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path)        如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)         如果path是绝对路径,返回True
    os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间
    

    6.hashlib模块

    生成一个MD5密文

    import hashlib
    
    obj = hashlib.md5(bytes('asdf', encoding='utf-8'))
    obj.update(bytes('123', encoding='utf-8'))
    ret = obj.hexdigest()
    print(ret)
    

    7.正则表达式

    python中re模块提供了正则表达式相关操作

    字符:

    . 匹配除换行符以外的任意字符   

    w 匹配字母或数字或下划线或汉字   

    s 匹配任意的空白符   

    d 匹配数字   

     匹配单词的开始或结束   

    ^ 匹配字符串的开始   

    $ 匹配字符串的结束

    次数:

    * 重复零次或更多次

    + 重复一次或更多次  

    ? 重复零次或一次

    {n} 重复n次

    {n,} 重复n次或更多次   

    {n,m} 重复n到m次

    match

    # match,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
     
     
     match(pattern, string, flags=0)
     # pattern: 正则模型
     # string : 要匹配的字符串
     # falgs  : 匹配模式
         X  VERBOSE     Ignore whitespace and comments for nicer looking RE's.
         I  IGNORECASE  Perform case-insensitive matching.
         M  MULTILINE   "^" matches the beginning of lines (after a newline)
                        as well as the string.
                        "$" matches the end of lines (before a newline) as well
                        as the end of the string.
         S  DOTALL      "." matches any character at all, including the newline.
     
         A  ASCII       For string patterns, make w, W, , B, d, D
                        match the corresponding ASCII character categories
                        (rather than the whole Unicode categories, which is the
                        default).
                        For bytes patterns, this flag is the only available
                        behaviour and needn't be specified.
          
         L  LOCALE      Make w, W, , B, dependent on the current locale.
         U  UNICODE     For compatibility only. Ignored for string patterns (it
                        is the default), and forbidden for bytes patterns.
    
    # 无分组
    r = re.match("hw+", origin)
    print(r.group())     # 获取匹配到的所有结果
    print(r.groups())    # 获取模型中匹配到的分组结果
    print(r.groupdict()) # 获取模型中匹配到的分组结果
    # 有分组
    # 为何要有分组?提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来)
    
    r = re.match("h(w+).*(?P<name>d)$", origin)
    print(r.group())     # 获取匹配到的所有结果
    print(r.groups())    # 获取模型中匹配到的分组结果
    print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组
    

     search

    # search,浏览整个字符串去匹配第一个,未匹配成功返回None
    # search(pattern, string, flags=0)

     # 无分组
    
     r = re.search("aw+", origin)
     print(r.group())     # 获取匹配到的所有结果
     print(r.groups())    # 获取模型中匹配到的分组结果
     print(r.groupdict()) # 获取模型中匹配到的分组结果
    
     # 有分组
    
     r = re.search("a(w+).*(?P<name>d)$", origin)
     print(r.group())     # 获取匹配到的所有结果
     print(r.groups())    # 获取模型中匹配到的分组结果
     print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组
    

     findall

    # findall,获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖;
    # 空的匹配也会包含在结果中
    #findall(pattern, string, flags=0)

     # 无分组
     r = re.findall("aw+",origin)
     print(r)
    
     # 有分组
     origin = "hello alex bcd abcd lge acd 19"
     r = re.findall("a((w*)c)(d)", origin)
     print(r)
    

     sub

    # sub,替换匹配成功的指定位置字符串
    sub(pattern, repl, string, count=0, flags=0)
    # pattern: 正则模型
    # repl   : 要替换的字符串或可执行对象
    # string : 要匹配的字符串
    # count  : 指定匹配个数
    # flags  : 匹配模式

     # 与分组无关
    
     origin = "hello alex bcd alex lge alex acd 19"
     r = re.sub("aw+", "999", origin, 2)
     print(r)
    

     split

    # split,根据正则匹配分割字符串 
    split(pattern, string, maxsplit=0, flags=0)
    # pattern: 正则模型
    # string : 要匹配的字符串
    # maxsplit:指定分割个数
    # flags  : 匹配模式

     # 无分组
     origin = "hello alex bcd alex lge alex acd 19"
     r = re.split("alex", origin, 1)
     print(r)
    
     # 有分组
            
     origin = "hello alex bcd alex lge alex acd 19"
     r1 = re.split("(alex)", origin, 1)
     print(r1)
     r2 = re.split("(al(ex))", origin, 1)
     print(r2)
    

     常用正则表达式

    IP:
    ^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$
    手机号:
    ^1[3|4|5|8][0-9]d{8}$
    邮箱:
    [a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
    
  • 相关阅读:
    CentOS iftop和nethogs安装配置
    sfcapd服务新增nfdump安装
    CentOS 7.0手工解压安装Java JDK1.8环境
    华为USG防火墙CPU超高因NGE引擎占用率超过60%解决方法
    centos7快速安装smokeping
    华为USG防火墙常用SNMP OID
    Oracle物理结构和逻辑结构是怎样的?
    解决Windows Server 2008磁盘脱机状态
    Zabbix监控华为交换机CPU、温度并显示到拓扑图
    Object.defineProperty的理解
  • 原文地址:https://www.cnblogs.com/terrycy/p/5823619.html
Copyright © 2011-2022 走看看