1. 包

  • 什么是包

    包就是模块

  • 包有什么用

    1. 当模块内的函数过多时,为了方便管理函数,把多个函数划分成多个模块,但同时不同改变原来的导入方式,把多个模块放入一个包(文件夹)内。

    2. 通过包,可以不改变用户的导入方式(就和装饰器不改变被装饰函数的调用方式同理),提高用户体验

    3. 未来导包就是导__init__

  • 在包的用法中主要注意的有两点

    1. 包是含有__init__.py的文件夹;导包就是导入__init__

    2. 包一定是被当做模块文件导入,模块文件的搜索路径以执行文件为准

  • 相对导入和绝对导入(只能在包中内部使用)

    相对导入:

    • .表示(同一文件夹下的)当前文件的目录
    • ..表示当前文件的父目录
    • ...表示当前文件的爷爷目录

    绝对导入:

    • 就是不用点表示目录,直接写名字

    2. time模块

  • time模块的作用

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

  • 三种类型的时间

    • 格式化时间
    • 结构化时间
    • 时间戳

    他们是以结构化时间为中间介质,格式化时间和结构化时间可以互相转化;时间戳可以和结构化时间互相转化

1. 优先掌握

  1. import time
  2. time.time() # 时间戳 (从计算机元年开始到现在的时间,以秒计算显示)
  3. time.sleep(1) # 让程序运行到这一步暂停1秒

2. 了解

  1. import time
  2. print(time.time()) # 时间戳形式
  3. # 格式化时间
  4. print(time.strftime('%Y-%m-%d %X'))
  5. # 结构化时间
  6. print(time.localtime())
  7. # 结构化时间 --》 格式化时间
  8. struct_time = time.localtime(3600*24*365)
  9. print(time.strftime('%Y-%m-%d %X',struct_time))
  10. # 格式化时间 --》 结构化时间
  11. format_time = time.strftime('%Y-%m-%d %X')
  12. print(time.strptime(format_time,'%Y-%m-%d %X'))
  13. # 结构化时间 --》 时间戳
  14. struct_time = time.localtime(3600*24*365)
  15. print(time.mktime(struct_time))
  16. # 时间戳 --》 结构化时间
  17. time_stamp = time.time()
  18. print(time.localtime(time_stamp))

3. datetime模块

  • datetime模块的作用

    可以实现时间的加减

1. 优先掌握

  1. import datetime
  2. # 获取当前时间
  3. now = datetime.datetime.now()
  4. print(now) # 2019-09-28 19:56:44.330734
  5. # 默认3天 # 2019-10-01 19:56:44.330734
  6. print(now + datetime.timedelta(3))
  7. # 加3周 #2019-10-19 19:56:44.330734
  8. print(now + datetime.timedelta(weeks=3))
  9. # 加3小时 2019-09-28 22:56:44.330734
  10. print(now + datetime.timedelta(hours=3))
  11. # 减3小时 # 2019-09-28 16:56:44.330734
  12. print(now - datetime.timedelta(hours=3))
  13. print(now + datetime.timedelta(hours=-3))
  14. # 1949-10-01 10:01:00
  15. print(now.replace(year=1949, month=10, day=1, hour=10, minute=1, second=0, microsecond=0))

4. random模块

  • random模块的作用

    产生随机数

1. 优先掌握

  1. import random
  2. # 掌握
  3. # 随机生成一个0~1之间的小数点后是16位的小数 如: `0.4033592505614103`
  4. print(random.random())
  5. # 产生一个[1-3]之间包括首尾的随机数
  6. print(random.randint(1,3))
  7. # 打乱
  8. lt=[1,2,3]
  9. random.shuffle(lt)
  10. print(lt)
  11. # 随机选择一个
  12. print(random.choice(lt))
  13. # 只随机一次 --> 梅森旋转算法
  14. import time
  15. # random.seed(time.time())
  16. # random.seed(111111111111)
  17. seed() 方法是改变随机数生成器的种子,也就是说,当使用seed()方法后,后面的产生的随机数就是一样的了。
  18. seed()括号内的数不同,产生的随机数种子也不同
  19. 就是说 例如:
  20. random.seed(1) 后面再产生的随机数都为 2
  21. random.seed2)后面再产生的随机数都为 3
  22. print(random.random())

2. 了解

  1. # 了解
  2. print(random.sample([1,'a','c',2,3,4],2))

5. hashlib模块和hmac模块

  • hashlib模块的作用

    对字符加密,最后产生一个32位的字符串。如:62416b4bd5d83b0908bbd3523fea81cc 类型:<class 'str'>

  • hmac模块的作用

    对字符加密,并且加上密钥,相当于用了两层加密。

  • hashlib模块的实例

  1. import hashlib
  2. # 叠加性
  3. m = hashlib.md5()
  4. # m.update(b'say')
  5. # m.update(b'hello') # 981fe96ed23ad8b9554cfeea38cd334a
  6. m.update(b'hash123456')
  7. print(m.hexdigest()) # 对于不同的字符而言,用不重复
  8. # 981fe96ed23ad8b9554cfeea38cd334a
  9. # 手机号/生日/性别/qq账号/以前的密码/ --》 挖矿(算法)
  10. # 1 2 3 5 71113 111111111111111 - 1111111111111111111111 111111111111111111111111111111111111111111111111111
  11. hash_pwd = '0562b36c3c5a3925dbe3c4d32a4f2ba2'
  12. pwd_list = [
  13. 'hash3714',
  14. 'hash1313',
  15. 'hash94139413',
  16. 'hash123456',
  17. '123456hash',
  18. 'h123ash',
  19. ]
  20. for pwd in pwd_list:
  21. m = hashlib.md5()
  22. m.update(pwd.encode('utf8'))
  23. res = m.hexdigest()
  24. if res == hash_pwd:
  25. print(f'获取密码成功:{pwd}')
  • hamc模块的实例

    1. import hmac
    2. m = hmac.new(b'maerzi')
    3. m.update(b'hash123456') # f82317e44545b0ab087109454814b5c4
    4. print(m.hexdigest())
    5. m = hmac.new(b'sdfjhjk2394879ul%$$Y#($&')
    6. m.update(b'hash123456') # 2a70fd0f13cb49357f40d326a4e071a2
    7. print(m.hexdigest())
    8. pwd_list = [
    9. 'hash3714',
    10. 'hash1313',
    11. 'hash94139413',
    12. 'hash123456',
    13. '123456hash',
    14. 'h123ash',
    15. ]

6. typing模块

  • typing模块的作用

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

  • 实例

    1. def func(x: int, lt: Iterable) -> list:
    2. return [1, 2, 3]
    3. func(10, '123123')

7. requests模块

  • request是模块的作用

    爬数据的模块,模拟浏览器对url发送请求,获取数据

  • 实例

    1. # url ——> 一个特定的网址 -》 永不重复
    2. import requests
    3. response = requests.get('https://ishuo.cn')
    4. data = response.text
    5. print(data)

8. re模块

  • re模块的作用

    从大的字符串中挑选出 具有某种形状特点的字符串

  • 正则表达式 : Pattern

  • 正则表达式本身是一种小型的、高度专业化的编程语言,它并不是Python的一部分。

  • 正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行

    1. 以下必须得记住
    2. # .*?
    3. # 贪婪和非贪婪
    4. # findall
    5. # re.S
    6. # match和search的区别
    7. # 分组
    8. # 有名分组:给分组加名字

1. re模块的正则表达式的元字符和语法

  • re模块匹配后返回的结果都是列表

    1. s = 'abcdabc'
    2. # abc
    3. # abc
    4. # bc bc
    5. # ^:以...开头
    6. res = re.findall('^ab', s)
    7. print(res)
    8. res = re.findall('^bc', s)
    9. print(res)
    10. # $: 以..结尾
    11. s = 'abcdabc'
    12. res = re.findall('bc$', s)
    13. print(res)
    14. # .: 任意字符
    15. s = 'abc红abc'
    16. res = re.findall('abc.', s)
    17. print(res)
    18. # \d: 数字
    19. s = 'skld2342ljk'
    20. res = re.findall('\d', s)
    21. print(res)
    22. # \w: 非空,数字字母下划线
    23. s = 'skld_23 42ljk'
    24. res = re.findall('\w', s)
    25. print(res)
    26. # \s:空,空格/\t/\n
    27. s = 'skld_23 42ljk'
    28. res = re.findall('\s', s)
    29. print(res)
    30. # \D: 非数字
    31. s = 'skld2342ljk'
    32. res = re.findall('\D', s)
    33. print(res)
    34. # \W: 空
    35. s = 'skld_23 42ljk'
    36. res = re.findall('\W', s)
    37. print(res)
    38. # \S:非空
    39. s = 'skld_23 42ljk'
    40. res = re.findall('\S', s)
    41. print(res)
    42. # +: 前面的一个字符至少1个
    43. s = 'abcddddd abcd abc'
    44. print(re.findall('abcd+', s))
    45. # ?:前面的一个字符0-1个
    46. s = 'abcddddd abcd abc'
    47. print(re.findall('abcd?', s))
    48. # *:前面的一个字符至少0个
    49. s = 'abcdddddddddddddddddd abcd abc'
    50. print(re.findall('abcd*', s))
    51. # []: 中括号内的都可以
    52. s = 'abc bbc cbc dbc'
    53. print(re.findall('[abc]bc', s))
    54. # [^]: 中括号的都不可以
    55. s = 'abc bbc cbc dbc'
    56. print(re.findall('[^abc]bc', s))
    57. # |:或
    58. s = 'abc bbc dbc'
    59. print(re.findall('abc|bbc', s))
    60. # {2}:前面的一个字符的个数是2个
    61. s = 'abccabc abccc'
    62. print(re.findall('abc{2}', s))
    63. # {1,2}:前面的一个字符的个数是1个或2个
    64. s = 'abccabc abccc'
    65. print(re.findall('abc{1,2}', s)) # ['abcc', 'abc', 'abcc']

2. 贪婪模式和非贪婪模式

  1. # 贪婪模式
  2. # .(一个任意字符)*(0-无穷个)
  3. s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
  4. print(re.findall('a.*g', s)) # ['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'] 就是 a~g 找一个最长的
  5. # 非贪婪模式(*******)
  6. # .(任意字符)*(0-无穷个)?(让他进入非贪婪模式)
  7. s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg' ['abcdefg'] 就是a~g找一个最短的
  8. print(re.findall('a.*?g', s))

3. 匹配邮箱实例

  1. s = '#@#@#@nickchen121@163.com$$$$////nick@qq.com$$#$#$[]]2287273393@162.com@$2423423lksdlfj#'
  2. # \w(字母/数字/下划线)+(0-无穷个)@ \w(字母/数字/下划线)+(0-无穷个).com
  3. print(re.findall('\w+@\w+\.com', s)) # \. 是使 点 成为一个普通的字符

4. re模块中的常用功能函数

  1. ## compile 用来创建Pattern对象
  2. s = 'abcd abcddd abc'
  3. # res = re.compile('abcd*')
  4. email_pattern = re.compile('\w+@\w+.com')
  5. phone_patter = re.compile('\d{13}')
  6. print(re.findall(email_pattern, s))
  7. print(re.findall('abcd*', s))
  8. # ## match: 从开头找一个,找得到就不找了 ;找不到报错 --》
  9. # s = 'ab abcddd abc'
  10. # res = re.match('abcd*', s)
  11. # print(res.group())
  12. ## search: 从字符串找一个,就不找了
  13. s = 'ab abcddd abc'
  14. res = re.search('abcd*', s)
  15. print(res.group())
  16. ## split
  17. s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
  18. print(re.split('\d+', s))
  19. ## sub == replace
  20. s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
  21. print(re.sub('\d+', ' ', s))
  22. ## subn --> 替换了多少次
  23. s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
  24. print(re.subn('\d+', ' ', s))

5. 修饰符 re.S

  • 就是flags参数

    1. ## 修饰符 --> re.S会让.可以匹配换行符\n
    2. # .不匹配换行
    3. print(re.findall('abc.abc', s)) # ['abc*abc']
    4. # 匹配换行
    5. print(re.findall('abc.abc', s, re.S)) # ['abc\nabc', 'abc*abc']

6. 补充

  1. ## 分组 --> 只要括号里的(*****)
  2. s = 'abc abcd abcdd'
  3. print(re.findall('a(.)c(d)', s))
  4. ## 有名分组(了解)
  5. s = 'abc abcd abcdd'
  6. print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict())
  7. # 超高级用法
  8. s = 'abc123abc123' # c123a
  9. print(re.sub('c(\d+)a', ' ', s))
  10. print(re.sub('c(?P<name1>\d+)a', ' \g<name1> ', s)) # \g<name1>这个东西不能替换掉

9. uuid 模块

  • 用来生成一个全世界唯一的长度为36的uuid对象,可以强制转换成字符串类型。去掉 - 则为32位全球唯一字符串

  1. import uuid
  2. print(uuid.uuid4())
  3. print(len(str(uuid.uuid4())))
  4. # 194feb44-98b9-48cd-bcd5-eaeafc46843c
  5. # 36

包 ,模块(time、datetime、random、hashlib、typing、requests、re)的更多相关文章

  1. 包+time+datetime+random+hashlibhmac+typing+requests+re模块(day17整理)

    目录 昨日内容 os模块 sys模块 json模块 pickle模块 logging模块 今日内容 包 相对导入 绝对导入 time模块 sleep 时间戳 time 格式化时间 strtime 结构 ...

  2. Python常用模块(time, datetime, random, os, sys, hashlib)

    time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...

  3. 包与time,datetime,random,sys,shutil 模块

    一.包 包是什么? 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 注意: 1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在py ...

  4. Python常用模块time & datetime &random 模块

    时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...

  5. python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)

    前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...

  6. 模块 time,datetime,random,typing,hashlib,requests,re

    目录 包 什么是包 为什么要包 1. 包的介绍 2. 绝对导入和相对导入 - 绝对导入 - 相对导入 time模块 时间戳 格式化时间 结构化时间 sleep datetime模块 random模块 ...

  7. 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块

    目录 1. 包 2. time模块   1. 优先掌握 2. 了解 3. datetime模块   1. 优先掌握 4. random模块   1. 优先掌握   2. 了解 5. hashlib模块 ...

  8. (九)random、os、time、datetime、hashlib、pymysql、excel、sys、string相关模块

    1.random模块 1 import random,string 2 print(string.printable) #代表所有的 数字+字母+特殊字符 3 4 print(random.randi ...

  9. time,datetime,random,os,sys,hashlib,logging,configparser,re模块

    #-----time模块----- print(help(time)) #打印time帮助文档 print(time.time()) #打印时间戳 1569824501.6265268 time.sl ...

  10. 包、time、datetime、hashlib和hmac、request、re

    目录 包 包的特点 time模块 datetime模块 hashlib模块和hmac模块 hmac密钥(加盐) typing模块 request模块 正则模块 以下必须得记住 哪些做了解 包 包,这里 ...

随机推荐

  1. MySQL主从同步报错1507

    mysql 从库上手动删除partiton后,主库未做修改.后期主库上删除partiton后,出现问题. 故障现场 Last_Errno: 1507 Last_Error: Error 'Error ...

  2. 从 .NET 到 JavaScript —— 纯前端报表控件 ActiveReportsJS 焕新登场

    报表工具的发展史,最早可以追溯到微软报表SSRS(SQL Server Reporting Services)时期.最初,报表工具主要应用于报表的定制.呈现和输出.经过几十年的发展,随着各种业务系统功 ...

  3. PHP后台开发小经验

    js页面传参数 js的参数传输是关键,尤其是当一个页面的数据需要分步骤上传时. 同样的删除功能,不会操作批量删除时可以尝试单个删除,功能差不多,实现功能的方法也千千万,先做成它是第一位. 主页面很多条 ...

  4. vue的 :class 与 :style 的讲解

    Vue样式: Vue中通过属性绑定为元素的class样式 第一种使用方式:直接传递一个数组 注意:这里的class需要使用v-bind做数据绑定 第二种使用方式:在数组中使用三元表达式 第三种使用方式 ...

  5. 第十章 MIZ702 ZYNQ制作UBOOT固化程序

    10.0难度系数★☆☆☆☆☆☆ 10.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...

  6. TCP协议探究(四):定时器

    1 概述 重传定时器:使用于当希望收到另一端的确认. 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口 保活(keepalive)定时器:用于检测一个空闲连接的另一 ...

  7. C语言快速判断素数——不超时

    这属于算法上的问题,好好考虑一下算法,还要考虑一下素数的定义. 素数是只有1和本身能整除的整数.所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数 ...

  8. python+django学习一

    pycharm破解地址:https://blog.csdn.net/qq_32811489/article/details/78636049 按照视频写代码,记录关键的地方方便自己记忆, 视频教程地址 ...

  9. IE各版本处理XML的方式

    一.支持DOM2级的方式我们知道,现阶段支持DOM2的主流浏览器有IE9+.Firefox.Opera.Chrome和Safari.1.1.创建XML//实际上,DOM2级在document.impl ...

  10. Django rest-framework框架-用户权限实例

    简单实例: class MyPermission(object): ''' 权限控制类 ''' def has_permission(self,request,view): if request.us ...