模块
一、模块的介绍
(1)Python 模块(Module),是一个Python文件,以.py 结尾,包含了 Python 对象定义和Python语句。
(2)Python 对象定义和Python语句。
(3)模块让你能够有逻辑地组织你的Python代码段。
(4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
(5)模块能定义函数,类和变量,模块里也能包含可执行的代
二、模块的导入
1、import 语句
格式:inport 模块名
使用: 模块名.函数名
案例:
import time
print(1)
time.sleep(5)
print(2)
注意:
(1)一个模块只会被导入一次,不管你执行了多少次import,这样可以防 止导入模块被一遍又一遍地执行
(2)模块不调用就是置灰状态
2、from…import * 语句
格式:from 模块名 import * (* 所有的函数)
调用:直接使用函数或类
案例:
from time import *
print(1)
sleep(5)
print(2)
3、from…import…语句
格式:from 模块名 import 函数
from time import sleep
print(1)
sleep(5)
print(2)
4、要导入time模块中的sleep函数并取别名,使用如下语句:
格式:from 模块名 import 函数 as 别名
案例:
from time import sleep as s
print(1)
s(5)
print(2)
==========================
python中time模块
1、time模块中常见的方法:
time() #1970到现在的经过的秒数
案例:print(time.time())
ctime() #固定格式的当前时间
案例:print(time.ctime())
sleep(3) #休眠 单位是秒
案例:time.sleep(2) #2 表示秒数
asctime() #转换为asc码显示当前时间
案例:print(time.asctime())
strftime() #时间格式化
案例:print(time.strftime("%H-%M-%S-%y-%m-%d"))
2、random模块
生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱 一组数据等
random模块中常见的方法:
(1) random.random() #该方法是生成0-1之间的浮点数,但是能取到0,但是取不到1
案例:
print(random.random())
(2)random.randint(x,y) #该方法生成指定范围内整数,包括开始和结束值
案例:print(random.randint(1,3))
(3)random.randrange(x,y,step) #生成指定范围内的奇数,不包括结束值
案例:print(random.randrange(1,101,2))
(4)random.randrange(x,y,step) #生成指定范围内的偶数,不包括结束值
案例:print(random.randrange(0,101,2))
(5) random.sample(seq,n) #从序列seq中选择n个随机且独立的元素
案例:
a=[1,2,3,4,5]
print(random.sample(a,4))
(6)random.choice(test) #生成随机字符
案例:
a=[1,2,3,4,5]
print(random.choice(a))
(7)random.shuffle(list) #洗牌(随机数列)
案例:
a=[1,2,3,4,5]
random.shuffle(a)
print(a)
==================
3、string 模块
import string
print(string.digits) #0123456789
print(string.hexdigits) #0123456789abcdefABCDEF
print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz
==================
案例:
1、使用random模块随机生成手机号码、自己定义手机号码开头的前三位
方法一:
from random import *
import string
s=string.digits
sj=[“138”]
for i in range(8):
a=choice(s)
sj.append(a)
print("".join(sj))
方法二:
from random import *
import string
s=string.digits
c=sample(s,8)
b="".join©
sj=input(“输入前3位手机号:”)
print(sj+b)
2、用random模块随机生成6位数验证码
方法一:
from random import *
import string
s=string.hexdigits
print(’’.join(sample(s,6)))
方法二:
import random
import string
yanzheng=string.digits
yanzheng1=string.ascii_uppercase
yanzheng2=string.ascii_lowercase
list1=random.sample(yanzheng1+yanzheng2+yanzheng,6)
c=’’.join(list1)
print(“您生成的验证码为:”+c)
方法三:
import random
import string
a=[]
for i in range(6):
sz=string.digits
dx=string.ascii_uppercase
xx=string.ascii_lowercase
b=random.choice(sz+dx+xx)
a.append(b)
print("".join(a))
==========================
加密
import hashlib
(1)md5定义:md5是一种算法,可以将一个字符或文件,或压缩包,执行后就可以生成一个固定长度为128bit的串,这个基本上唯一的
md5在python3中被移除了,
python使用hashlib 模块进行MD5操作hash ,译作“散列”,也直接音译成“哈希”
哈希:把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数
(2)MD5常见的摘要算法,速度快,生成结果是固定的16字节,通常是用一个32位的16进制字符串表示
(3)常见的算法
(4)base64加解密
import base64
a=base64.b64encode(b"123456") print(a) #加密
b=base64.b64decode(b’MTIzNDU2’)
print(b) #解密base64shi python内置的模块,可以直接使用
备注:
(5)MD5
hash.digest () 返回摘要,作为二进制数据字符串值
hash.hexdigest () 返回摘要,作为十六进制数据字符串值
案例:
import hashlib
m=hashlib.md5() #创建MD5对象
m.update(b"123456")
#print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e
print(m) #
print(m.digest())#b’xe1nxdc9IxbaYxabxbeVxe0Wxf2x0fx88>’
备注:
1、pythone中要加上b,python2不需要
2、MD5不能反解,但是加密是固定,关系是一一对应,可以被对撞;
(6)sha256
import hashlib
m=hashlib.sha256() #创建MD5对象
m.update(b"123456")
print(m.hexdigest()) #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
(7)sha384
import hashlib
m=hashlib.sha384() #创建MD5对象
m.update(b"123456")
print(m.hexdigest()) #0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
拓展:
面试题:
如果在工作有很多数据,如果改动了看不出来,或者传递也不知道有没有修改,比如十万条数据?
(1)检查传输数据不一样
通过加密对数据进行加密处理,生成加密字符
如果有改动,字符就不相同;
(2)比对数据不一样,如果加密的字符不相同,说明两个数据不一致
作业:
通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字 符串
方法一:
import random
import string
a=[]
for i in range(6):
sz=string.digits
dx=string.ascii_uppercase
xx=string.ascii_lowercase
b=random.choice(sz+dx+xx)
a.append(b)
m="".join(a)
import hashlib
n = hashlib.md5()
n.update(m.encode(‘utf-8’))
print(n.hexdigest())
方法二:
import random,string,hashlib
m=hashlib.md5()
a=string.digits
b=string.ascii_uppercase
c=string.ascii_lowercase
d=random.sample(a+b+c,6)
e="".join(d)
m.update(b’e’)
print(m.hexdigest())
=================================
os模块
一、介绍os模块
(1)os模块对于目录,文件路径常用的模块
(2)导入os 模块(import os)
二、os模块的使用
os模块中常见的方法:
(1)os.getcwd()获取当前执行命令所在目录
案例:
print(os.getcwd())#获取当前操作文件它对应的路径(相对路径)
(2) os.path.isfile()判断是否文件
案例:
import os
url=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201"
url2=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201ss.py"
ml=r"D:ls"
txt=r"D:lscms.txt"
print(os.path.isfile(url)) #包不是文件 #False
print(os.path.isfile(url2)) #py文件是文件 ,ture
print(os.path.isfile(ml)) #目录不是文件,#False
print(os.path.isfile(txt)) #txt文档是文件True
(3)os.path.isdir() #判断是否是目录
import os
url=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201"
url2=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201ss.py"
ml=r"D:ls"
txt=r"D:lscms.txt"
print(os.path.isdir(url)) #包不是文件 #True
print(os.path.isdir(url2)) #py文件是文件 ,False
print(os.path.isdir(ml)) #目录不是文件,#True
print(os.path.isdir(txt)) #txt文档是文件False
(4)os.path.exists() #判断文件或目录是否存在
案例1:
import os
url=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201"
url2=r"C:UsersAdministratorPycharmProjectsdcshz12hz1201ss.py"
ml=r"D:ls"
bczmul=r"D:hzhzhzhzhzh"
txt=r"D:lscms.txt"
print(os.path.exists(bczmul)) #目录不存在,False
print(os.path.exists(url)) #包不是文件 #True
print(os.path.exists(url2)) #py文件是文件 ,False
print(os.path.exists(ml)) #目录不是文件,#True
print(os.path.exists(txt)) #txt文档是文件False
案例2:当判断不存在的文件,则创建
bczmul=r"D:lsabcxlh"
if not os.path.exists(bczmul) :#目录不存在,False
os.mkdir(bczmul)
(5)os.listdir(dirname) #列出指定目录下的目录或文件
案例:
import os
ml=r"D:ls"
print(os.listdir(ml))
(6)os.path.split(name) #分割文件名与目录
案例1:
import os
ml=r"D:ls"
print(os.path.split(ml)) #(‘D:’, ‘ls’)
a=os.path.split(ml)[0] # 根据元组中的索引取值 0
(7)os.path.join(path,name) #连接目录与文件名或目录
案例1:
import os
ml=r"D:ls"
print(os.path.split(ml))
a=os.path.split(ml)[0]
print(a)
pj=os.path.join(a,“1212.py”)
print(pj)
(8)os.mkdir(dir) #创建一个目录
案例:
import os
os.mkdir(r"D:lslsbz",755)
(9)os.rename(old,new) #更改目录名称
案例:
import os
os.rename(r"D:lslsbz",r"D:lslskk")
(10)abspath通过文件名获取当前名称对应的绝对路径
案例
import os
print(os.path.abspath(“ss.py”))
(11)remove 删除文件
案例:
import os
os.remove(r"D:lslsabc")
(12)固定格式
案例1:
import os
path=os.path.abspath(os.path.dirname(os.getcwd()))
print(path) #获取项目路径
案例2
a=os.path.dirname(os.path.dirname(file))
print(a) ##获取项目路径#
b=os.path.join(a,“conf.py”)
print(b) #C:/Users/Administrator/PycharmProjects/dcshz12conf.py
===========================
re模块
正则匹配:使用re模块实现
一、re基本介绍
1、什么是正则表达式?
正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符串来过滤的逻辑。
2、
(1)正则表达式是一种文本模式;
(2)帮助我们检查字符是否与某种模式匹配
(3)re模块使python语言拥有全部的表达式功能,从python1.5版本起增加了re模块
3、正则表达式的左右
(1)快速告诉的查找和分析字符串 比对字符,也叫模式匹配;(查找,比对,匹配,替换,出入,添加,删除等功能)
(2)实现一个编译查找,一般在日志文件处理时用的多
4、认识正则表达式中的特殊元素?
re模块数量词匹配:
预定义字符集匹配:
d:数字0-9
D:非数字
s:空白字符
n:换行符
w 匹配字母数字
W 匹配非字母数字
^:表示的匹配字符以什么开头
$:表示的匹配字符以什么结尾
:匹配前面的字符0次或n次 eg:ab (* 能匹配a 匹配ab 匹配abb )
+:匹配+前面的字符1次或n次
:匹配前面的字符0次或n次
?:匹配?前面的字符0次或1次
{m}:匹配前一个字符m次
{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
#1、findall # 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[] #
#2、match
#从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败得到一个none值
注意:如果规则带了’+’,则匹配1次或者多次,无’+'只匹配一次
3、compile # 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
4、search
#从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错re模块
============================
1、findall
案例1:查找字符存在,则显示字符
import re
a=“abcdefghijkab”
b=re.findall(“a”,a)
print(",".join(b))
案例2:查找字符不存在,则显示一个空列表
import re
a=“abcdefghijkab”
b=re.findall(“y”,a)
print(b)
2、match 匹配开头
案例1: 查找存在值,返回对象中包含索引值
import re
a=“abcdefghijkab”
b=re.match(“ab”,a)
print(b) #
案例2:查找存在的值,返回索引值,使用span
import re
a=“abcdefghijkab”
b=re.match(“ab”,a)
print(b.span()) #(0, 2)
案例3: 查找不存在的字符,返回none值
import re
a=“abcdefghijkab”
b=re.match(“o”,a)
print(b) #None
3、search 匹配第一个
案例1:查找存在的数,显示索引
import re
a=“abcdefghijkab”
b=re.search(“a”,a)
print(b) #
import re
a=“abcdefghijkab”
b=re.search(“w”,a)
print(b) #None
1、d:数字0-9
案例1:
import re
a=“ab4cde2fghi1jkab”
b=re.findall("d",a)
print(b) #[‘4’, ‘2’, ‘1’]
2、D:非数字
import re
a=“ab4cde2fghi1jkab”
b=re.findall("D",a)
print(b) #[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘a’, ‘b’]
3、s:空白字符
import re
a=“ab4cde2 fghi1j kab”
b=re.findall("s",a)
print(b) #[’ ', ’ ', ’ ', ’ ']
4、n:换行符
import re
a=“ab4cde2 nfghni1j n kab”
b=re.findall("n",a)
print(b) #[’n’, ‘n’, ‘n’]
5、w 匹配字母数字
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.findall("w",a)
print(b) #[‘a’, ‘b’, ‘4’, ‘c’, ‘d’, ‘e’, ‘2’, ‘f’, ‘g’, ‘h’, ‘i’, ‘1’, ‘j’, ‘k’, ‘a’, ‘b’]
6、W 匹配非字母数字
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.findall("W",a)
print(b) #[’#’, ‘#’, ‘n’, ‘n’, ‘!’, ‘!’, ‘n’, ’ ']
7 .^:表示的匹配字符以什么开头
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.match("^a",a)
print(b) #
8.KaTeX parse error: Expected 'EOF', got '#' at position 36: … re a="ab4cde2#̲#nfghni1j!!n…",a)
print(b) #
9::匹配前面的字符0次或n次
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.findall(“ab*”,a)
print(b) #[‘ab’, ‘ab’]
10 +:匹配+前面的字符1次或n次
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.findall(“a+”,a)
print(b) #[‘a’, ‘a’]
11、?:匹配?前面的字符0次或1次
import re
a=“ab4cde2##nfghni1j!!n kab”
b=re.findall(“a?”,a)
print(b) #[‘a’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘a’, ‘’, ‘’]
11、{m}:匹配前一个字符m次
import re
a=“ab4cde2##nfghni1j!!n kaab”
b=re.findall(“a{1}”,a)
print(b) #
12、{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
import re
a=“ab4cde2##nfghni1aaaaj!!n kaab”
b=re.findall(“a{1,3}”,a)
print(b) #[‘a’, ‘aaa’, ‘a’, ‘aa’]
========================
标志匹配符
(1)re.I 忽略大小写(常用)
案例:
import re
a=“Aab4cde2##nAfghni1aaaaj!!n kaab”
b=re.findall(“a”,a,flags=re.I)
print(b) #
(2)re.M 多行匹配,能匹配到换行n,影响 ^ 和 $
案例:
import re
a=“Aab4cde2##nAfg n hni1aaaaj!!n kaab”
b=re.findall(“a”,a,flags=re.M)
print(b) #
(3)re.S 使 . 匹配包括换行在内的所有字符
案例:
import re
a=“Aab4cde2##nAfg n hni1aaaaj!!n kaab”
b=re.findall(“a”,a,flags=re.S)
print(b) #
========================
sub 替换
案例:
import re
a=“Aab4cde2##nAfg n hni1aaaaj!!n kaab”
b=re.sub("d",“多测师”,a,flags=re.U)
print(b) #
========================
xlrd 模块
一、xlrd模块介绍
(1)xlrd 是可用于读取excel表示表格数据(不支持写的操作,写操作需要xlwt模块来实现)
(2)支持xlsx和xls 格式excel 表示;(不支持csv文件,csv文件可用pyton自带的csv模块操作)
(3)模块安装方式:
方法一:pip3 install xlrd1.2.0 安装
pip install xlrd1.2.0 安装
pip uninstall xlrd 卸载xlrd
方法二:
二、xlrd使用
1、创建一个xlsx的表格:如下
2、 xlrd的使用
(1)xlrd.open_workbook(url) 打开表格
url=“D:lshz1212.xlsx”
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.sheet_names())
(2)获取sheet :
1、获取所有的sheet名称:
案例:
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.sheet_names()) #[‘hz1’, ‘hz2’, ‘hz3’]
2、获取所有sheet的对象
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.sheets())
3、通过sheet名查找
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.sheet_by_name(“hz3”))
4、通过索引名查找
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.sheet_by_index(2))
5、获取sheet数量
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
print(data.nsheets)
3、单元格的操作
(1)获取sheet名称,
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
sheet=data.sheets()[0]
print(sheet.name)
(2)获取总行数和列数
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
sheet=data.sheets()[0]
print(sheet.nrows) # 总行是21行
print(sheet.ncols) #总列数7列
(3)行的操作:
sheet.row_values(0) 获取第一行所有的内容,
sheet.row(0) #获取单元格值类型和内容
sheet.row_types(0) # 获取单元格数据类型
案例1:
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
sheet=data.sheets()[0]
print(sheet.row_values(0))
print(sheet.row(0))
#[text:‘id’, text:‘name’, text:‘sex’, text:‘age’, text:‘math’, text:‘chinese’, text:‘english’]
4、表格的操作:
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
sheet=data.sheets()[0]
print(sheet.row_values(0,2,5))
#0表示行,索引从0开始,2表示是开始列,列也是从0开始,5,结束列(不包含)
#第一个数表示行数,第二个数表示开始列,第三个数表示结束列
print(sheet.col_values(0,1,3))
#0表示列,索引从0开始,1表示的是开始行(行也是从零开始),3表示结束行(不包含)
#第一个数表示列,第二数表示开始行,第三个是表示结束行
5、通过遍历获取表中指定列或行所有的数据
import xlrd
url=“D:lshz1212.xlsx”
data=xlrd.open_workbook(url)
sheet=data.sheets()[0]
for i in range(sheet.nrows):
print(sheet.row_values(i)[1],end=",")



