昨日内容

os模块

与操作用系统交互

sys模块

与python解释器交互

json模块

跨平台数据交互,json串

pickle模块

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

logging模块

日志记录

今日内容

  1. 包就是模块,拿来导入用的
  2. 包是含有__init__的文件夹,导包就是导入__init__
  3. 包一定被当作模块文件导入,模块文件的搜索路径以执行文件路径为准

相对导入

.代表当前被导入文件所在的文件夹

..代表当前被导入文件所在的文件夹的上一级

...代表当前被导入文件所在的文件夹的上一级的上一级

  1. # aaa/.py
  2. from .m1 import func1
  3. from .m2 import func2

绝对导入

  1. # aaa/.py
  2. from aaa.m1 import func1
  3. from aaa.m2 import func2

time模块

提供三种不同类型的时间,且可以互相转换

sleep

  1. time.sleep(3) # 暂停3s

时间戳 time

从1970年1月1日00时开始

  1. import time
  2. print(time.time()) #

格式化时间 strtime

  1. print(time.strtime('%Y-%m-%d %H:%M:%S'))
  2. print(time.strtime('%Y-%m-%d %X'))

结构化时间 localtime

  1. print(time.localtime())

结构化时间-->格式化时间

  1. struct_time = time.localtime(3600*24*365)
  2. print(time.strtime('%Y-%m-%d %H:%M:%S',struct_time))

格式化时间-->结构化时间

  1. format_time = time.strtime('%Y-%m-%d %H:%M:%S')
  2. print(time.strptime(format_time,'%Y-%m-%d %H:%M:%S'))

结构化时间-->时间戳

  1. struct_time = time.localtime(3600*24*365)
  2. print(time.mktime(struct_time))

时间戳-->结构化时间

  1. time_stamp = time.time()
  2. print(time.localtime(time_stamp))

datetime模块

时间的加减

  1. datetime.now() 当前时间
  2. timedelta(整形)
  1. import datetime
  2. now = datetime.datetime.now()
  3. prtin(now) # 2019-09-28 18:40:11.829581当前时间
  4. # 默认加/减天数
  5. print(now + datetime.timedelta(3)) # 2019-10-01 18:40:11.829581
  6. # 加3周
  7. print(now + datetime.timedelta(week = 3))
  8. # 加减3小时
  9. print(now + datetime.timedelta(hours = 3))
  10. # 替换时间
  11. print(now.replace(year=1949, month=10, day=1, hour=10, minute=1, second=0, microsecond=0))

random模块

随机数

  1. random 随机数(<1)
  2. randint 指定范围随机数
  3. shuffle 打乱顺序
  4. choice 随机选择
  5. seed 只随机一次
  6. sample 指定随机抽取多少个
  1. import random
  2. # 0-1的随机数
  3. print(random.random())
  4. # [1,3]的随机数
  5. print(random.randit(1,3))
  6. # 打乱顺序
  7. lt = [1,2,3]
  8. random.shuffle(lt)
  9. print(lt)
  10. # 随机选择一个
  11. print(random.chioce(lt))
  12. # 只随机一次
  13. random.seed(1) # 根据传入的数字进行类似梅森旋转算法得出随机数
  14. import time
  15. random.seed(time.time()) # 根据时间得出随机数,每一次都会一样
  16. # 了解
  17. print(random.sample([1,2,3,'a'],2)) # 在列表中随机抽取2个数

hashlib模块和hmac模块

hashlib模块

对字符加密,并且加上密钥

  1. import hashlib
  2. m = hashlib.md5()
  3. m.update(b'hello')
  4. print(m.hexdigest()) # 根据hello生成的密钥

固定的字符串生成的密钥相同

hmac模块

密钥(加密钥)

  1. import hmac
  2. m = hmac.new(b'wick') # 加的密钥
  3. m.update(b'hash123456') # 本身密码生成的密钥
  4. # 最终存储的密钥是用户输入的密码生成的密钥加上内置密钥,更加难以破解

typing模块

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

  1. #导入可迭代对象,迭代器对象,生成器三种数据类型
  2. from typing import Iterable,Iterator,Generator
  3. def func(x:int, y: Iterable)->list:
  4. return[1,2,3,4]
  5. func(10,'qwer')

requests模块

模拟浏览器对url发送请求, 拿到数据

  1. import requests
  2. response = requests.get('http://www.baidu.com') # 向百度网站发送请求,得到一个响应
  3. data = response.text # 将响应读取成文本
  4. res = re.findall('正则匹配',data,re.S) # 利用正则re筛选出想要的数据

re模块

在字符串中筛选出符合某种特点的字符串

元字符

  1. ^ 以...开头

    1. import re
    2. s = 'abc红花dabc'
    3. res = re.findall('^ab',s)
    4. print(res) # ['ab'] 按照\n分隔找元素
  2. $ 以...结尾

    1. res = re.findall('bc$',s)
    2. print(res) # ['bc'] 根据\n判断结尾
  3. . 代表任意字符(不匹配换行符)

    1. res = re.findall('abc.',s)
    2. print(res) #['abc红']
  4. \d 数字

    1. s = 'asd313ew'
    2. res = re.findall('\d',s)
    3. print(res) # ['3','1','3']
  5. \w 数字/字母/下划线

    1. s = 'af 1*-@ f_'
    2. res = re.findall('\w',s)
    3. print(res) # ['a','f','1','f','_']
  6. \s 空格,\t,\n

    1. s = 'sdfa 324_sa#$@'
    2. res =re.findall('\s',s)
    3. print(res) # [' ']
  7. \D 非数字

    1. s = 'a32s 3f '
    2. res =re.findall('\D',s)
    3. print(res) # ['a','s',' ,'f',' ']
  8. \W 除了字母/数字/下划线

    1. s = 'sk-#l@d_23 42ljk'
    2. res = re.findall('\W', s)
    3. print(res) # ['-','#','@',' ']
  9. \S 非空

    1. s = 'skld_23 42ljk'
    2. res = re.findall('\S', s)
    3. print(res) # ['s', 'k', 'l', 'd', '_', '2', '3', '4', '2', 'l', 'j', 'k']
  10. + 前面一个字符至少有一个

    1. s = 'abcddddd abcd abc'
    2. print(re.findall('abcd+', s)) # ['abcddddd', 'abcd']
  11. ? 前面的一个字符0或者1个

    1. s = 'abcddddd abcd abc'
    2. print(re.findall('abcd?', s)) # ['abcd','abcd','abc']
  12. * 前面的一个字符至少0个

    1. s = 'abcdddddddddddddddddd abcd abc'
    2. print(re.findall('abcd*', s)) # ['abcdddddddddddddddddd', 'abcd', 'abc']
  13. [] 中括号内随便取一个都可以

    1. s = 'abc bbc cbc dbc'
    2. print(re.findall('[abc]bc', s)) # ['abc', 'bbc', 'cbc']
  14. [^]: 中括号的都不可以

    1. s = 'abc bbc cbc dbc'
    2. print(re.findall('[^abc]bc', s)) # ['dbc']
  15. |:或

    1. s = 'abc bbc dbc'
    2. print(re.findall('abc|bbc', s)) # ['abc','bbc']
  16. {2} 前面的字符2个

    1. s = 'abccabc abccc'
    2. print(re.findall('abc{2}', s)) # ['abcc', 'abcc']
  17. {1,2} 前面的字符1-2个

    1. s = 'abccabc abccc'
    2. print(re.findall('abc{1,2}', s)) # ['abcc', 'abc', 'abcc']

贪婪模式

.* 任意字符 + 至少0个

  1. s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
  2. print(re.findall('a.*g', s)) # 包括'a'和最后一个'g'之间的所有字符,['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg']

非贪婪模式

.*? 任意字符 + 至少0个 + 前一字符0或1个(控制进入非贪婪)

  1. s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
  2. print(re.findall('a.*?g', s)) # 包括'a'和第一个'g'之间的所有字符['abcdefg']
  • bug

    1. s = 'abcdefg'
    2. print(re.findall('.*?', s)) # ['', 'a', '', 'b', '', 'c', '', 'd', '', 'e', '', 'f', '', 'g', '']

特殊构造 (了解)

  1. a(?=\d) a后面是数字,但是不要数字,且不消耗字符串内容

    1. s = 'a123 aaaa a234 abc'
    2. # a1 aa
    3. # aa
    4. # aa a2 ab
    5. print(re.findall('a(?=\d)', s)) # ['a', 'a']
    6. print(re.findall('a(?=\w)', s)) # ['a', 'a', 'a', 'a', 'a', 'a']
    7. print(re.findall('a\w', s)) # ['a1', 'aa', 'aa', 'a2', 'ab']
    • 匹配邮箱

      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))

函数

  1. compile 编译

    把正则匹配编译成一个变量

    1. s = 'abcd abcddd abc'
    2. # 邮箱匹配规则
    3. email_pattern = re.compile('\w+@\w+.com')
    4. # 手机号码匹配规则
    5. phone_patter = re.compile('\d{13}')
    6. print(re.findall(email_pattern, s))
    7. print(re.findall('abcd*', s)) # res = re.compile('abcd*')
  2. match 匹配

    只在字符串开头查找,找不到就报错

    1. s = 'ab abcddd abc'
    2. res = re.match('abc*', s) # 对象
    3. print(res.group()) # ab
    4. res = re.match('abcd*', s)
    5. print(res.group()) # 报错
  3. search 查找

    从字符串中查找,找到就不找了

    1. s = 'ab abcddd abc'
    2. res = re.search('abcd*', s)
    3. print(res.group()) # abcddd
  4. split 切割

    1. s = 'ab23423abcddd234234abcasdfjl'
    2. print(re.split('\d+', s)) # ['ab', 'abcddd', 'abcasdfjl']
  5. sub 替换

    1. s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    2. print(re.sub('\d+', ' ', s)) # ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj
  6. subn 替换,替换次数

    1. s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    2. print(re.subn('\d+', ' ', s)) # ('ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj', 12)

修饰符

re.S 全局搜索(匹配换行符)

  1. s = '''abc
  2. abcabc*abc
  3. '''
  4. # .不匹配换行
  5. print(re.findall('abc.abc', s)) # ['abc*abc']
  6. print(re.findall('abc.abc', s, re.S)) # ['abc\nabc', 'abc*abc']

分组

只要括号里面的内容

  1. s = 'abc abcd abcdd'
  2. print(re.findall('a(.)c(d)', s)) # [('b', 'd'), ('b', 'd')]

有名分组 (了解)

a(?Pd)

  1. s = 'abc abcd abcdd'
  2. print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict()) # {'name': 'b', 'name2': 'd'}

超高级用法

'c(?P\d+)a', '\g'

  1. s = 'abc123abc123' # c123a
  2. print(re.sub('c(\d+)a', ' ', s)) # ab bc123
  3. print(re.sub('c(?P<name1>\d+)a', '\g<name1>', s)) # \g<name1>这个东西不能替换掉 ab123bc123
  1. # 以下必须得记住
  2. # .*?
  3. # 贪婪和非贪婪
  4. # findall
  5. # re.S
  6. # match和sarch的区别
  7. # 分组
  8. # 有名分组:给分组加名字
  9. # 哪些做了解
  10. # 杂七杂八的元字符
  11. # 特殊构造元字符
  12. # 特殊修饰符

包+time+datetime+random+hashlibhmac+typing+requests+re模块(day17整理)的更多相关文章

  1. (常用)time,datetime,random,shutil(zipfile,tarfile),sys模块

    a.time模块import time 时间分为三种形式1.时间戳 (时间秒数的表达形式, 从1970年开始)print(time.time())start_time=time.time()time. ...

  2. python time、datetime、random、os、sys模块

    一.模块1.定义模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)包:用来从逻辑上组织 ...

  3. python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  4. Day13 Python基础之time/datetime/random模块一(十一)

    time模块 import time print(help(time)) time.time() #return current time in seconds since the Epoch as ...

  5. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  6. Python-Windows下安装BeautifulSoup和requests第三方模块

    http://blog.csdn.net/yannanxiu/article/details/50432498 首先给出官网地址: 1.Request官网 2.BeautifulSoup官网 我下载的 ...

  7. [py]requests+json模块处理api数据,flask前台展示

    需要处理接口json数据,过滤字段,处理字段等. 一大波json数据来了 参考: https://stedolan.github.io/jq/tutorial/ https://api.github. ...

  8. python接口测试中安装whl格式的requests第三方模块

    下载 安装 requests第三方模块 下载:http://docs.python-requests.org/en/latest/user/install/#install 我下载是 https:// ...

  9. Python-hashlib、OS、Random、sys、zipfile模块

    # print(sys.version) #python 版本 # print(sys.path) # print(sys.platform) #当前什么系统 # print(sys.argv) #当 ...

随机推荐

  1. Java的EOF标识?

     这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能.  直接从JDK接口文档入手,以FileInputStrea ...

  2. MonkeyRunner学习笔记(1)

    MonkeyRunner是java编程语言实现的Python写出来的一个API调用工具 MonkeyRunner有三个类:MonkeyRunner,MonkeyDevice,MonkeyImage M ...

  3. json入门初体验

    json是JavaScript对象表示法,也是轻量级的文本数据交互格式,独立于语言,能够自我描述 json文本格式在语法上与创建JavaScript对象代码相同,多以json不需要解析器,js程序能够 ...

  4. Spring Boot 整合 Web 开发

    这一节我们主要学习如何整合 Web 相关技术: Servlet Filter Listener 访问静态资源 文件上传 文件下载 Web三大基本组件分别是:Servlet,Listener,Filte ...

  5. Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中

    1.新建一个WebApi项目,并添加Dockerfile文件: FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EX ...

  6. Oracle 存储过程判断语句正确写法和时间查询方法

    判断语句:if 条件 then   if  条件  then ************;   elsif  条件  then  ************;   elsif 条件  then ***** ...

  7. Mysql高手系列 - 第21篇:什么是索引?

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第21篇. 本文开始连续3篇详解mysql索引: 第1篇来说说什么是索引? 第2篇详解Mysql中 ...

  8. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  9. Activity初学乍练

    1.Activity的概念与Activity的生命周期图: 注意事项: onPause()和onStop()被调用的前提是: 打开了一个新的Activity!而前者是旧Activity还可见的状态:后 ...

  10. MySQLdb操作数据库

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...