zoukankan      html  css  js  c++  java
  • day_17

    上节课回顾

    os模块

    与操作系统交互

    sys模块

    与python解释器交互

    json模块

    跨平台数据交互,json串

    pickle模块

    存储python所有类型的数据,为了python文件和python文件的交互

    logging模块

    日志记录

    今日所学

    1. 包 == 模块,包也是拿来导入用的
    2. 包是含有__init__.py的文件夹;导包就是导入__init__
    3. 包一定是被当做模块文件导入,模块文件m1.py/m2.py的搜索路径以执行文件的路径为准

    time模块

    提供了三种不同类型的时间(最主要为时间戳),三种不同类型的时间可以互相转换

    # 时间戳形式
    print(time.time()) 
    # 格式化时间
    print(time.strftime('%Y-%m-%d %X'))
    # 结构化时间
    print(time.localtime())
    

    time.sleep() 让程序睡觉几秒

    datetime模块

    时间的加减

    import datetime
    
    now = datetime.datetime.now()
    print(now)
    
    # 默认3天
    print(now + datetime.timedelta(3))
    # 加3周
    print(now + datetime.timedelta(weeks=3))
    # 加3小时
    print(now + datetime.timedelta(hours=3))
    # 减3小时
    print(now - datetime.timedelta(hours=3))
    

    random模块

    随机数

    random.random()

    0-1的数

    random.randint(1,3)

    1-3的整数

    lt=[1,2,3]
    random.shuffle(lt)# 打乱列表
    random.choice(lt)# 随机选择一个
    

    random.seed()

    只随机一次

    hashlib模块和hmac模块

    hashlib模块

    加密

    m = hashlib.md5()
    m.update(b'hello')
    m.update(b'hello')
    print(m.hexdigest())
    
    
    m = hashlib.md5()
    m.update(b'hellohello')
    print(m.hexdigest())
    
    1. 结果永远都是相同长度的字符串
    2. 叠加性

    hmac模块

    加密, 加盐处理

    m = hmac.new(b'123')
    m.update(b'hellow')
    print(m.hexdigest())
    

    typing模块

    与函数联用,控制函数参数的数据类型,提供了基础数据类型之外的数据类型

    requests模块

    一般用于爬虫,用来爬取数据,模拟浏览器对url发送请求拿到数据

    #用法
    import requests
    res=requests.get(url)
    data=res.text
    print(data)
    

    re模块

    去字符串找符合某种特点的字符串

    #查找所有
    findall
    # ^:以...开头
    res = re.findall('^ab', s)
    print(res)
    res = re.findall('^bc', s)
    print(res)
    # $: 以..结尾
    s = 'abcdabc'
    res = re.findall('bc$', s)
    print(res)
    
    # .: 任意字符
    s = 'abc红abc'
    res = re.findall('abc.', s)
    print(res)
    
    # d: 数字
    s = 'skld2342ljk'
    res = re.findall('d', s)
    print(res)
    
    # w: 非空,数字字母下划线
    s = 'skld_23 42ljk'
    res = re.findall('w', s)
    print(res)
    
    # s:空,空格/	/
    
    s = 'skld_23 42ljk'
    res = re.findall('s', s)
    print(res)
    
    # D: 非数字
    s = 'skld2342ljk'
    res = re.findall('D', s)
    print(res)
    
    # W: 空
    s = 'skld_23 42ljk'
    res = re.findall('W', s)
    print(res)
    
    # S:非空
    s = 'skld_23 42ljk'
    res = re.findall('S', s)
    print(res)
    
    # +: 前面的一个字符至少1个
    s = 'abcddddd abcd abc'
    print(re.findall('abcd+', s))
    
    # ?:前面的一个字符0-1个
    s = 'abcddddd abcd abc'
    print(re.findall('abcd?', s))
    
    # *:前面的一个字符至少0个
    s = 'abcdddddddddddddddddd abcd abc'
    print(re.findall('abcd*', s))
    
    # []: 中括号内的都可以
    s = 'abc bbc cbc dbc'
    print(re.findall('[abc]bc', s))
    
    # [^]: 中括号的都不可以
    s = 'abc bbc cbc dbc'
    print(re.findall('[^abc]bc', s))
    
    # |:或
    s = 'abc bbc dbc'
    print(re.findall('abc|bbc', s))
    
    # {2}:前面的字符2个
    
    s = 'abccabc abccc'
    print(re.findall('abc{2}', s))
    
    # {1,2}:前面的字符2个
    
    s = 'abccabc abccc'
    print(re.findall('abc{1,2}', s))
    
    # 贪婪模式
    总是尝试匹配尽可能多的字符
    # .(任意字符)*(0-无穷个)
    
    s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
    print(re.findall('a.*g', s))
    
    # 非贪婪模式(*******)
    总是尝试匹配尽可能少的字符
    # .(任意字符)*(0-无穷个)?(让他进入非贪婪模式)
    s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
    print(re.findall('a.*?g', s))
    
    
    # 匹配邮箱:
    s = '#@#@#@nickchen121@163.com$$$$////nick@qq.com$$#$#$[]]2287273393@162.com@$2423423lksdlfj#'
    # w(字母/数字/下划线)+(0-无穷个)@ w(字母/数字/下划线)+(0-无穷个).com
    print(re.findall('w+@w+.com', s))
    
    
    ## match:  从开头找一个,找得到就不找了 ;找不到报错 --》
    s = 'ab abcddd abc'
    res = re.match('abcd*', s)
    print(res.group())
    
    ## search: 从字符串找一个,就不找了
    s = 'ab abcddd abc'
    res = re.search('abcd*', s)
    print(res.group())
    
    ## split 拼接
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.split('d+', s))
    
    ## sub == replace 替换
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.sub('d+', ' ', s))
    
    ## subn --> 替换了多少次
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.subn('d+', ' ', s))
    
    ## 修饰符 --> re.S会让.匹配换行符(*****)
    s = '''abc
    abcabc*abc
    '''
    
    # .不匹配换行
    print(re.findall('abc.abc', s))  # ['abc*abc']
    print(re.findall('abc.abc', s, re.S))  # ['abc
    abc', 'abc*abc']
    #
    
    ## 分组 --> 只要括号里的(*****)
    s = 'abc abcd abcdd'
    print(re.findall('a(.)c(d)', s))#[('b', 'd'), ('b', 'd')]
    
    ## 有名分组(了解)
    s = 'abc abcd abcdd'
    print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict())
    
  • 相关阅读:
    如何锻炼出最牛程序员的编码套路
    如果仔细观察他们,你会发现他们时时都在锻炼
    单纯地每天埋头于工作并不能算是真正意义上的锻炼
    把全世界的人们都联系在一起,提升人们的社交参与度
    HTML5十五大新特性
    html5的八大特性
    【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
    【分块】【链表】bzoj2738 矩阵乘法
    【分块】bzoj3343 教主的魔法
    【线段树】bzoj3747 [POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/maqiaobin/p/11604351.html
Copyright © 2011-2022 走看看