zoukankan      html  css  js  c++  java
  • pythonday05(正则深入、冒泡排序算法、自定义模块、常用标准模块)

    一、正则深入

    re

    匹配数字开头

    import re
    #匹配以数字开头
    p = re.compile("^[0-9]") #使用compile进行编译正则表达式,在大量匹配处理的时候非常有效
    m = p.match("14534Abc")
    print(m.group()) #输出结果:1
    '''
    m = re.match("^[0-9]","14534Abc")
    print(m.group()) #输出结果:1
    '''

    匹配数字、字母等开头

    import re
    #匹配以数字和字母开头
    p = re.compile("^[0-9A-Za-z]")
    m = p.match("AK14534Abc")
    print(m.group()) #输出结果:A

    匹配ip地址:

    #匹配IP地址
    string = '180.115.183.45 - - [03/Feb/2016:10:35:50 +0800] "CONNECT imppl.tradedoubler.com:443 HTTP/1.0" 400 172 "-" "-"'
    p = re.compile("([0-9]{1,3}.){3}d{1,3}")
    ip = p.match(string).group()
    # ip = re.match("([0-9]{1,3}.){3}d{1,3}",string).group()
    print(ip)

    正则表达式常用5种操作

    re.match(pattern,string) #从头匹配

    re.search(pattern,string) #匹配整个字符串,直到找到一个匹配

    re.split() #将匹配到的格式当做分隔点对字符串分成列表类型

    re.findall() # 找到所有要匹配的字符并返回列表格式

    示例:
    import re
    string = "sdsdss(welcome)dff(china)"
    m = re.findall('(.*?)',string) #匹配所有以(开头和以)结尾的字符串,返回类型为list
    print(m) #['(welcome)', '(china)']
    print(type(m))  #<class 'list'>
    View Code

    re.sub(pattern, repl, string, count,flag) # 替换匹配到的字符

    示例:
    import re
    string = "sdsdss(welcome)dff(china)"
    m = re.sub("(|)",""",string) #匹配"("或者")",然后将其替换成双引号
    print(m) #sdsdss"welcome"dff"china"
    print(type(m)) #<class 'str'>
    View Code

    模式

    re.l #大小写不敏感

    import rz
    string = "swht"
    m = re.search("[A-Z]",string,flags = re.I)
    print(m.group()) #s

    匹配手机号:

    import re
    string = "sdssaawa15865921165sdsdscf"
    m = re.search("(1)([358]d{9})",string)
    print(m.group())

    匹配IP地址:

    import re
    ip_addr = "inet 192.168.60.223 netmask 0xffffff00 broadcast 192.168.60.255"
    IP = re.search("(([1-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5]).){3}[0-9]{1,3}",ip_addr)
    print(IP.group()) #192.168.60.223

    匹配邮箱地址:

    import re
    emailstr = "qingbo.song@gmail.com www.baidu.com"
    email = re.search("^[a-z]([0-9a-z]|.){4,20}@[0-9a-z]{0,10}.[0-9a-z]{0,8}",emailstr)
    print(email.group()) #qingbo.song@gmail.com
     
    #只匹配gmail邮箱
    import
    emailstr = "test@163.com www.baidu.com"
    email = re.search("^[a-z]([0-9a-z]|.){4,20}@gmail.com",emailstr)
    if email:
        print(email.group()) #test@163.com
    else:
        print("系统只接受163邮箱注册,感谢你的支持!")

    二、模块

    模块介绍

    模块:代码实现了某个功能的代码集合。
    类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来处理和代码间的耦合。可能需要多个.py的文件组成。
    
    模块类型:
        1. 自定义模块
        2. 内置标准模块(标准库)
        3. 开源模块
            1. 下载:
                1. yum
                2. apt-get
                3. pip
                4. easy_install
                5. 源码编译安装 python stup.py install

    导入模块
    import module
    from module.xx.xx import xx
    from module.xx.xx import xx as rename  
    #不推荐下面的导入方式,如果被导入的模块中含有与当前文件中相同名称的函数,容易产生调用混乱。
    from module.xx.xx import * 

    time & datetime模块
    import time
    import datetime
     
    #作用:计算一个程序从执行到结束用的时间
    print(time.clock()) #返回处理器时间,3.3开始已废弃
    print(time.process_time()) #返回处理器时间,3.3开始已废弃
     
    #获取系统的当前时间,从1970年1月1日0:00到当前时间的秒数
    print(time.time()) #返回当前系统时间戳
     
    #格式化输出的时间
    print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间
    print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式,输出昨天的时间Tue Jan 25 18:23:48 2016
     
    #time.struct_time(tm_year=2016, tm_mon=2,c=48, tm_wday=5, tm_yday=44, tm_isdst=0)
    #gmtime是从零时区算起的格林时间
    print(time.gmtime(time.time()-86640)) #将时间戳转换成struct_time格式
    #当前时间,是按照系统当前时区算起的
    print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回 的本地时间
    print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式
    #time.sleep(4) #sleep
     
    #格式化输出时间
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式
    #time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    #'2016-02-14 12:45:49'
     
    print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式
     
    #datetime module
     
    #将时间戳转换成日期格式
    print(datetime.date.today()) #输出格式python2 2016-01-26  python3:datetime.date(2016, 2, 14)
    print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式
    current_time = datetime.datetime.now() #
    print(current_time) #输出2016-01-26 19:04:30.335935
    print(current_time.timetuple()) #返回struct_time格式
     
    #datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
    #将当前的时间替换成输入的时间
    print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换
     
    str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式
    new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
    new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
    new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
    new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
    print(new_date)
    View Code
    random模块
    产生随机数
    import random
     
    #产生随机小数
    print(random.random())
    '''
    0.8426794741026359
    0.8703558703687821
    '''
     
    #产生随机整数
    print(random.randint(1,10))
    print(random.randrange(1,10))
    '''
    1
    9
    '''
    View Code
    生成随机验证码
    import random
    def checkcode(n):
        checkcode = ''
        for i in range(n):
            current = random.randrange(0,4)
            if current != i:
                tmp = chr(random.randint(65,90))
            else:
                tmp = random.randint(0,9)
            checkcode += str(tmp)
        return checkcode
     
    print(checkcode(6))
    View Code

    os模块

    提供对操作系统进行调用的接口
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1') 删除空的目录,或多级空目录
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录,或者移动,相当于shell命令mv
    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命令,直接显示,只是单个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所指向的文件或者目录的最后修改时间
    View Code

    sys模块

    用于提供对解释器相关的操作

    sys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0)
    sys.version        获取Python解释程序的版本信息
    sys.maxint         最大的Int值
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform       返回操作系统平台名称
    sys.stdout.write('please:')
    val = sys.stdin.readline()[:-1] #输入一行内容,减去后面的最后一个
    

    使用sys和time模块生成进度条

    生成进度条。调用函数输入的参数为进度条长度
    '''
    import sys,time
    def processbar(rangenum):
        for i in range(rangenum):
            if i == 0:
                sys.stdout.write("0%[#")
            elif i == rangenum - 1:
                sys.stdout.write("#]100%")
            else:
                sys.stdout.write("#")
                #刷新缓存,使其实时显示出来
                sys.stdout.flush()
                time.sleep(0.5)
     
    processbar(16)
    View Code

    json 和 pickle

    json和pickle是用于序列化的两个模块:
    json 
    
    
    json:用于处理字符串和python数据类型间的转换

    json模块提供了四个功能:dumps、dump、loads、load

    json在所有的语言中都通用,存取的字节字符

     pickle:

    
    
    pickle:用于处理python特有类型和python数据类型间的转换

    pickle模块提供了四个功能:dumps、dump、loads、load

    在python中独有一个模块,存取二进制字符
    不仅仅可以序列化简单的字符、列表、字典,还能序列化函数、类以至于整个程序

     关于dump和dumps的区别

    dump直接将序列化后的字符写到文件中,dumps是将序列化后的字符先赋给一个变量,然后再有write方法将其写入到文件中

    关于load和loads的区别

    load直接从文件中读取内容,loads是从内存中获取文件的内容

    shutil模块

    高级的 文件、文件夹、压缩包 处理模块

    shutil.copyfileobj(fsrc, fdst[, length])

    功能:将文件内容拷贝到另一个文件中,可以部分内容
    

    shutil.copyfile(src, dst)

    功能:仅拷贝文件
    

    shutil.copymode(src, dst)

    功能:仅拷贝权限,内容、组、用户均不变
    

    shutil.copystat(src, dst)

    功能:拷贝状态的信息,包括:mode bits, atime, mtime, flags
    

    shutil.copy(src, dst)

    功能:拷贝文件和权限
    

    shutil.copy2(src, dst)

    功能:拷贝文件和状态信息
  • 相关阅读:
    最值
    算数平均值/加权平均值
    jdbatemplate使用
    所有正规jar包
    java代码在计算机中经历的三个阶段,反射的原理
    lambda函数式编程思想
    重写equals方法
    安全牛-弱点扫描
    安全牛-主动收集
    安全牛-被动收集
  • 原文地址:https://www.cnblogs.com/apnsa/p/5195198.html
Copyright © 2011-2022 走看看