1. 包

  • 什么是包

    包就是模块

  • 包有什么用

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

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

    3. 未来导包就是导__init__

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

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

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

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

    相对导入:

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

    绝对导入:

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

    2. time模块

  • time模块的作用

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

  • 三种类型的时间

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

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

1. 优先掌握

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

2. 了解

import time

print(time.time())  # 时间戳形式

# 格式化时间
print(time.strftime('%Y-%m-%d %X')) # 结构化时间
print(time.localtime()) # 结构化时间 --》 格式化时间
struct_time = time.localtime(3600*24*365)
print(time.strftime('%Y-%m-%d %X',struct_time)) # 格式化时间 --》 结构化时间
format_time = time.strftime('%Y-%m-%d %X')
print(time.strptime(format_time,'%Y-%m-%d %X')) # 结构化时间 --》 时间戳
struct_time = time.localtime(3600*24*365)
print(time.mktime(struct_time)) # 时间戳 --》 结构化时间
time_stamp = time.time()
print(time.localtime(time_stamp))

3. datetime模块

  • datetime模块的作用

    可以实现时间的加减

1. 优先掌握

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

4. random模块

  • random模块的作用

    产生随机数

1. 优先掌握

import random

# 掌握

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

2. 了解

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

5. hashlib模块和hmac模块

  • hashlib模块的作用

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

  • hmac模块的作用

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

  • hashlib模块的实例

import hashlib

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

    import hmac
    
    m = hmac.new(b'maerzi')
    m.update(b'hash123456') # f82317e44545b0ab087109454814b5c4
    print(m.hexdigest()) m = hmac.new(b'sdfjhjk2394879ul%$$Y#($&')
    m.update(b'hash123456') # 2a70fd0f13cb49357f40d326a4e071a2
    print(m.hexdigest()) pwd_list = [
    'hash3714',
    'hash1313',
    'hash94139413',
    'hash123456',
    '123456hash',
    'h123ash',
    ]

6. typing模块

  • typing模块的作用

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

  • 实例

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

7. requests模块

  • request是模块的作用

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

  • 实例

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

8. re模块

  • re模块的作用

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

  • 正则表达式 : Pattern

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

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

  •  以下必须得记住
    
    # .*?
    # 贪婪和非贪婪
    # findall
    # re.S
    # match和search的区别
    # 分组
    # 有名分组:给分组加名字

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

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

    s = 'abcdabc'
    # abc
    # abc
    # bc bc # ^:以...开头
    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:空,空格/\t/\n
    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}:前面的一个字符的个数是1个或2个 s = 'abccabc abccc'
    print(re.findall('abc{1,2}', s)) # ['abcc', 'abc', 'abcc']

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

# 贪婪模式

# .(一个任意字符)*(0-无穷个)

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

3. 匹配邮箱实例

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

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

## compile 用来创建Pattern对象
s = 'abcd abcddd abc'
# res = re.compile('abcd*')
email_pattern = re.compile('\w+@\w+.com')
phone_patter = re.compile('\d{13}')
print(re.findall(email_pattern, s)) print(re.findall('abcd*', 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))

5. 修饰符 re.S

  • 就是flags参数

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

6. 补充

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

9. uuid 模块

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

import uuid
print(uuid.uuid4())
print(len(str(uuid.uuid4()))) # 194feb44-98b9-48cd-bcd5-eaeafc46843c
# 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. 获取父窗口iframe的ztree对象

    问题如下:我要在jqgrid中获取ztree的选中节点对象 var iframe = parent.$("#ztree的iframeId").contents(); var ztr ...

  2. 《MIT 6.828 Lab 1 Exercise 2》实验报告

    本实验链接:mit 6.828 lab1 Exercise2. 题目 Exercise 2. Use GDB's si (Step Instruction) command to trace into ...

  3. [转帖]四个修改Docker默认存储位置的方法

    四个修改Docker默认存储位置的方法 https://blog.51cto.com/forangela/1949947 易改乾坤关注0人评论27435人阅读2017-07-22 09:18:48   ...

  4. SpringBoot 使用WebSocket打造在线聊天室

    教程: https://www.jianshu.com/p/55cfc9fcb69e https://wallimn.iteye.com/blog/2425666 关于websocket基础普及见:h ...

  5. superset部署

    superset功能概述: 丰富的数据可视化集 易于使用的界面,用于探索和可视化数据 创建和共享仪表板 与主要身份验证提供程序集成的企业级身份验证(通过Flask AppBuilder进行数据库,Op ...

  6. HTNL基础之四

    11.<nav>导航元素 标签定义及使用说明 表示页面中导航链接的部分,例如:传统导航条,侧边栏导航,页内导航,翻页等 <nav> 标签定义导航链接的部分. 并不是所有的 HT ...

  7. 集成板的CodeBlocks编译器配置相关文档

    如需安装包请后台留言!! 原文链接:https://w.url.cn/s/A1RSfZP 打开安装包进行安装,除安装路径大家可以自行调整外, 其他默认即可.最后安装完成,CodeBlocks的大门即将 ...

  8. AlertManager 部署及使用

    熟悉了 Grafana 的报警功能,但是 Grafana 的报警功能目前还比较弱,只支持 Graph 的图表的报警.今天来给大家介绍一个功能更加强大的报警工具:AlertManager. 简介 之前我 ...

  9. vue插件总结——总有你能用上的插件

    UI组件 框架 element - 饿了么出品的Vue2的web UI工具套件 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开源 UI 组件库 Keen-UI - ...

  10. python 比对PDF文件

    基本思路: 1.读取pdf内容,存放到不同的 list 2.比较 list 的相似度 ------------------------ 实现------------------------- 1.PD ...