zoukankan      html  css  js  c++  java
  • 常用模块(一)

    一.什么是模块(一组功能的集合)

    1.你要和某个东西打交道,而这个东西本身和python没有关系,这个东西本身就存在python提供了一个功能的集合 专门负责和这个东西打交道

    2.模块实际上就是给我们提供功能

    3.模块只不过是python提供给我们去操作这个内容的方法

    二.模块的类型

    1.内置模块: 不需要我们自己安装的 解释器自带的

    2.第三方模块: 需要我们自己去安装的模块

    3.自定义模块: 我们自己写的模块

     三常用的模块:

    1.re模块  在Python中使用正则表达式的规则时所调用的方法

    1.1在python中使用正则表达式的特点和问题

    1.1.1查找;

    (1)findall:匹配所有 每一项都是列表中的元素
    ret = re.findall("d", 'sjkhk172按实际花费928')
    #参数:  正则表达式,带匹配的字符串,flag
    print(ret)
    findall
    search: 只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法获取结果. 如果没有匹配到,会返回None,使用group会报错
    
    ret = re. search("d",'sjkhk172按实际花费928')
    print(ret)  #内存地址,这是一个正则匹配的结果
    print(ret.group()) #通过ret.group()获取真正的结果
    
    ret = re. search("d","sjsdnvJHUIGdskd") 
    print(ret)  #ret 是None
    print(ret.group())  #  会报错
    
    #search的常用方式
    ret = re. search("d",'172sjkhk按实际花费928')
    if ret:  #ret.内存地址,这是一个正则匹配的结果
        print(ret.group())  #通过ret.group()来获取真正的结果
    search
    match: 从头开始匹配,相当search中的正则表达式加一个^
    ret =re. match("d",'172sjkhk按实际花费928')
    print(ret)  #内存地址
    match

    1.1.2字符串的扩展:替换,切割(使用正则表达式)

    s = 'alex83taibai40egon25'
    ret = re.split("d+",s)
    print(ret)
    切割
    sub #旧的 新的 谁 替换的次数
    ret = re.sub("d","H","alex83taibai40egon25")
    print(ret)
    
    
    ret = re.sub("d","H","alex83taibai40egon25",1)
    print(ret)
    替换sub
    subn:返回一个元祖,第二个元素是替换的次数
    ret = re.subn("d","H","alex83taibai40egon25")
    print(ret)
    替换subn

    1.2 re模块的进阶:时间,空间

    compile   节省你使用正则表达式解决问题的时间

       编译     把正则表达式 编译成 字节码

    优点: 在多次使用的过程中,不会多次编译

    ret= re.compile("d+")  #已经编译完了
    print(ret)
    res = ret.findall('alex83taibai40egon25')
    print(res)
    
    
    res = ret.search('alex83taibai40egon25')
    print(res.group())

    finditer :节省你是用正则表达式解决问题的空间/内存

    ret = re. finditer("d",'alex83taibai40egon25')

    # ret :返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存

    for i in ret:

      print(i.group())

    1.3分组在re模块中的使用

    1.3.1分组在search中的应用

    import re
    s = '<a>wahaha</a>'  # 标签语言 html 网页 
    ret = re.search('<(w+)>(w+)</(w+)>',s)
    print(ret.group())#没有参数或者参数是零时,取所有结果
    print(ret.group(1))#数字参数所代表的结果是取对应分组中的内容
    print(ret.group(2))
    print(ret.group(3))
    View Code

    1.3.2为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容

    import re
    s = '<a>wahaha</a>'
    ret = re.findall("(w+)",s)
    print(ret)
    
    ret = re.findall(">(w+)<",s)
    print(ret)
    
    #取消分组优先(?:正则表达式)#当想成为一组集合而不想优先选择时
    ret = re.findall("d+(?:.d+)?", "1.234*4")
    print(ret)

    注意:分组在正则表达式中形成一组集合,在Python中表示优先显示

     关于分组

    对于正则表达式来说 有些时候我们需要进行分组,来整体约束某一组字符出现的次数

    (.[w]+)?

    对于python语言来说 分组可以帮助你更好更精准的找到你真正需要的内容

    <(w+)>(w+)</(w+)>

    1.3.3分组在split的应用

    #分组可以让用来切割的数据保留下来
    ret = re.split('d+','alex83taibai40egon25')
    print(ret)    #['alex', 'taibai', 'egon', '']
    ret = re.split('(d+)','alex83taibai40egon25')
    print(ret)   #['alex', '83', 'taibai', '40', 'egon', '25', '']

    1.4分组命名(?P<组名>正则表达式)

    s = '<a>wahaha</a>'
    ret= re. search(">(?p<con>w+)<",s)
    print(ret.group(1))
    print(ret.group("con"))
    #判断标签是否是一对标签,如<a>...</a>,<b>...</b>
    import re
    s = '<a>wahaha</a>'
    pattern = "<(w)+>(w+)</(w+)>"
    ret = search(pattern,s)
    print(ret.group(1)==ret.group(3))
    #当是一对标签时输出True,当不是一对标签时输出False
    #使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
    pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>'
    ret = re.search(pattern,s)
    print(ret)

     2.常用模块:random模块(取随机数)

    import random #导入模块
    #随机取小数
    random.random()#取大于0小于1的小数
    0.7664338..
    random.uniform(1,3)#取大于1小于3的小数
    1.62758..
    
    #随机取整数
    random.randint(1,5)取大于等于1小于等于5之间的整数(顾头顾尾)
    random.randrange(1,10,2)#取大于等于1,小于10之间的奇数(顾头不顾尾)
    
    #随机取列表中的元素(1个返回值)
    random.choice([1,"23",[4,5]])#1或者23或者[4,5]
    #随机取列表中的元素多个(多个返回值)
    random.sample([1,'23',[4,5]],2)#列表中的元素任意两个组合
    #打乱列表的顺序(打乱一个列表的顺序,在原列表的基础上直接进行修改,节省空间)
    item = [1,3,5,7,9]
    random.shuffle(item)#打乱次序
    print(item)
    [5,1,3,7,9]

    3.时间模块

      和时间有关的我们就要用时间模块.

    3.1常用方法

    1.time.sleep(sece)
    (线程)推迟指定的时间运行.单位为秒
    2.time.time()
    获取当前时间戳

    3.2表示时间的三种方式
    (1)时间戳(timestamp):通常来说,时间戳表示是从1970年1月1日00:00:00开始按秒计算的偏移量,我们运行type(time.time()),返回的是float类型

    (2)格式化时间字符串(Format String):"199-12-6"

    %y:两位数的年份
    %Y:四位数的年份
    %m:月份
    %d:日
    %H 24小时制小时数
    %I 12小时制小时数
    %M 分钟数
    %S 秒
    格式

    (3)元组(struct_time):struct_time元组共有九个元素(年,月,日,时,分,秒,一周中的第几天,一年中的第几天)

    索引(Index) 属性(Attribute) 值(Values)
    0 tm_year(年) 2011
    1 tm_mon(月) 1-12
    2 tm_mday(日) 1-31
    3 tm_hour(时) 0-23
    4 tm_min(分) 0-59
    5 tm_sec(秒) 0-60
    6 tm_wday(weekday) 0-6(0表示周一)
    7 tm_yday(一年中的第几天) 1-366
    8 tm_isdst(是否夏令时) 默认为0
    #导入时间模块
    >>>import time
    
    #时间戳
    >>>time.time()
    1500875844.800804
    
    #时间字符串
    >>>time.strftime("%Y-%m-%d %X")
    '2017-07-24 13:54:37'
    >>>time.strftime("%Y-%m-%d %H-%M-%S")
    '2017-07-24 13-55-04'
    
    #时间元组:localtime将一个时间戳转换为当前时区的struct_time
    time.localtime()
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
              tm_hour=13, tm_min=59, tm_sec=37, 
                     tm_wday=0, tm_yday=205, tm_isdst=0)

    小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

     

    #时间戳-->结构化时间
    #time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致
    #time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 
    >>>time.gmtime(1500000000)
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
    >>>time.localtime(1500000000)
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
    
    #结构化时间-->时间戳 
    #time.mktime(结构化时间)
    >>>time_tuple = time.localtime(1500000000)
    >>>time.mktime(time_tuple)
    1500000000.0
    #结构化时间-->字符串时间
    #time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则显示当前时间
    >>>time.strftime("%Y-%m-%d %X")
    '2017-07-24 14:55:36'
    >>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
    '2017-07-14'
    
    #字符串时间-->结构化时间
    #time.strptime(时间字符串,字符串对应格式)
    >>>time.strptime("2017-03-16","%Y-%m-%d")
    time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
    >>>time.strptime("07/24/2017","%m/%d/%Y")
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)

    注意: 求时间差时,要注意伦敦和北京的时间差

    求时间差:
    import time
    true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))
    time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))
    dif_time=time_now-true_time
    struct_time=time.gmtime(dif_time)
    print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,
                                           struct_time.tm_mday-1,struct_time.tm_hour,
                                           struct_time.tm_min,struct_time.tm_sec))

     

  • 相关阅读:
    通过pwndbg看看c中局部变量是如何在stack上放置的 此外 printf %n的作用终于弄明白了
    pip 安装过慢 使用清华源 加速
    mac 10.15.6 安装 IDA
    使用机器学习检测命令行混淆
    安全技能树简版
    栈溢出 hack 入门例子 hello world
    201116西瓜书机器学习系列---8、集成学习
    legend2---某些js代码电脑浏览器支持,手机浏览器不支持的调试
    legend2---做题页的每个题目对应的答案重点标颜色
    legend2---jquery重新渲染某元素
  • 原文地址:https://www.cnblogs.com/Bug66/p/9488309.html
Copyright © 2011-2022 走看看