python中的模块
一、模块的介绍
(1)Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句。
(2)结构:项目(包含目录和包)====包(包含.py,init初始化文件)====模块(函数,变量,代码,类)
(3)模块让你能够有逻辑地组织你的Python代码段。(注册模块,登录模块,查询模块)
(4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂
(5)模块能定义函数,类和变量,模块里也能包含可执行的代码
二、模块的导入
(1)模块只要导入一次,不管执行多少次;
(2)模块不调用时是置灰状态;
(3)导入方法:
1、import 模块名
案例:
import time #导入模块
print(1)
time.sleep(3) #sleep休眠
print(2)
2、
from....import * 语句
定义:导入模块中的所有类、函数、变量等等
格式:
from 模块名 import *
案例:
aa文件
def aa():
print(5)
def bb():
print(6)
bb文件
from gsml.gsbao.aa import *
aa()
bb()
(3)导入指定的模块
from 模块名 import...具体的函数
定义:from 语句让你从模块中导入一个指定的部分到当前命名空间中
案例:
from gsml.gsbao.aa import aa ,bb
aa()
bb()
(4)通过取别名来调用函数
格式:from 路径.模块名 import 函数名 as 别名
案例:from gsml.gsbao.aa import aa as a
a()
========================================
二、模块详解
1、time模块
import time
print(time.time()) #1970年到现在经过的秒数
print(time.ctime())#固定格式的当前时间
print(time.sleep(3)) #休眠 #括号内加秒数
print(time.asctime())#装换成asc码显示当前时间
print(time.strftime('%H-%M-%S %y-%m-%d')) #时间戳Sun Jun 5 10:36:57 2022
2、random 模块
生成随机浮点数,字符串,甚至帮助随机选择列表中的一个元素,打乱一组数据 ;
import random
print(random.random()) # 生成0-1之间的浮点数,但是能取到0.不能取到1
print(random.randint(1,3))# 随机生成指定范围内中一个值,包含开始值和结束值
print(random.randrange(1,3)) #随机生成指定范围的值,包含开始值,不包含结束值
print(random.randrange(1,10,2)) #随机生成指定范围内的奇数
print(random.randrange(0,10,2)) ##随机生成指定范围内的偶数
s=[1,2,3,4,5,6]
#print(random.sample(s,4))#生成一个固定集合中选n个数随机 #[2, 3, 6, 1]
# print(random.choice(s)) #随机生成一个字符
random.shuffle(s)
print(s)
3、string模块
import string
print(string.digits) #0123456789生成0-9的数据
print(string.hexdigits) #0123456789abcdefABCDEF
print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ 所有字母大写
print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz 所有字母小写
==================================================
练习题:
1、使用random模块随机生成手机号码、自己定义手机号码开头的前三位
方法1:
import random
s=[1,5,6]
p=[0,1,2,3,4,5,6,7,8,9]
m=random.sample(p,8)
a=s+m
for i in a:
print(i,end="")
方法2 :
import random
a=[1,3,4]
for i in range(0,8):
x=random.randint(0,9)
a.append(x)
print(a)
方法3:
a='138'
b='0123456789'
c=''
import random
for i in range(8):
c=c+str(random.choice(b))
print(a+c)
2、用random模块随机生成6位数验证码
方法1:
import random
import string
a=(string.hexdigits)
b=(random.sample(a,6))
for i in b:
print(i,end='')
方法2:
import random
for i in range(6):
c=random.randint(0,9)
print(c,end=' ')
方法3:
import random
import string
a=string.hexdigits
for i in range(6):
print(random.choice(a),end='')
方法四:
import random
import string
a=string.ascii_lowercase + string.digits + string.ascii_uppercase
for i in range(6):
print(random.choice(a),end='')
==================================================
4、加密算法
base64
MD5
一、加密算法
(1)md5,rsa,aes ,DES,BASE
(2)des 以64位分组对数据加密,加密和解密是同一种算法;
(3)rsa 加密算法,是一种非对称加密算法,
(4)aes 加密法是对称加密中最流行的算法之一
二、在线加解密
(1)网站:http://encode.fitfrom.com/
(2)在线加解密
(3)base64加解密
import base64
#base64加密
a=base64.b64encode(b"123456")
print(a) #b'MTIzNDU2'
# base64解密
# b=base64.b64decode(a)
b=base64.b64decode(b'MTIzNDU2')
print(b)
(4) MD5 加密
1、MD5是一种算法,可以将一个字符串或文件,通过md5后可以生成一个固定128bit的串,
2、md5的加密基本是唯一的;
3、python2中有md5,python3中把md5并列到hash模块中,译作:散列 ,直译为“哈希”
4、md5 可以把任意长度的输入,通过hash算法,编程固定长度的输出,该输出就是散列值,也称摘要值,改算法
就数哈希函数。
5、md5是最常见的摘要算法,速度快,生成的结果是固定的,通常用32位测16进制字符串表示。
6、hash模块中包含:md5,sha1,sha256,sha512等
7、一般返回值:
(1)hash.digest,返回摘要,作为二进制数据字符串值
(2)hash.hexdigeest 返回摘要,作为16进制的数据字符串
8、MD5 在python要加上b,python2中不需要
9、md5不能解密,但是加密是固定,关系是一一对应,可以被对撞。
案例1:
import hashlib
# m=hashlib.md5() # 创建md5的对象
# m.update(b'123456')
# print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e
# import hashlib
# m=hashlib.sha256()
# m.update(b"123456")
# print(m.hexdigest()) #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
import hashlib
m=hashlib.sha512()
m.update(b"123456")
print(m.hexdigest())
10、面试题,如果在工作中有很多数据,如果数据被改动或传递时改动,看不出?
a、通过加密检查数据
通过加密对数据尽心加密处理,生成加密字符,如果有改动,字符就不同;
b、比对字符是否一致,如果加密字符不相同,说明数据不一致,如果相同说明数据正确。
方法一:
b=string.digits+string.ascii_letters
s=''.join(random.sample(b,6))
print(s)
m = hashlib.md5()
m.update(s.encode('utf-8'))
print(m.hexdigest())
方法二:
b=string.digits+string.ascii_letters
s=''.join(random.sample(b,6))
print(s)
m = hashlib.md5()
m.update(s.encode('utf-8'))
print(m.hexdigest())
方法三:
import string,random,hashlib
a=[]
for i in range(6):
b=string.digits
c=string.ascii_uppercase
d=string.ascii_lowercase
s=random.choice(b+c+d)
a.append(s)
m=''.join(a)
print(m)
n=hashlib.md5()
n.update(m.encode('utf-8'))
print(n.hexdigest())
====================================
os模块
(1)os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适
应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编
程时,经常和文件、目录打交道,所以离不了os模块。
(2)os模块中常见的方法
os模块中常见的方法:
os.getcwd()获取当前执行命令所在目录
os.path.isfile()判断是否文件
os.path.isdir() #判断是否是目录
os.path.exists() #判断文件或目录是否存在
os.listdir(dirname) #列出指定目录下的目录或文件
os.path.split(name) #分割文件名与目录
os.path.join(path,name) #连接目录与文件名或目录
os.mkdir(dir) #创建一个目录
os.rename(old,new) #更改目录名称
os.remove() 删除文件
案例:
import os
print(os.getcwd()) #os.getcwd()获取当前执行命令所在目录 或包名
lj=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gsbao\aa.py"
lj1=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gsbao\ss.py"
ml=r"C:\Users\Administrator\PycharmProjects\gs2\gsml"
blj=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gsbao\nb.py"
# print(os.path.isfile(lj)) #判断是否文件 #True
# print(os.path.isfile(ml)) #False
# print(os.path.isdir(ml)) #True 判断是否目录
# print(os.path.isdir(lj)) #False
# print(os.path.exists(lj)) #True #判断文件或目录是否存在
# print(os.path.exists(blj))#False
# print(os.listdir(ml)) #os.listdir(dirname) #列出指定目录下的目录或文件
# #['app_01.py', 'gsbao', 'gs_002.py']
print(os.path.split(lj)) ##分割文件名与目录
#('C:\\Users\\Administrator\\PycharmProjects\\gs2\\gsml\\gsbao', 'aa.py')
# print(os.path.join(ml,'ss.txt')) ##连接目录与文件名或目录
#C:\Users\Administrator\PycharmProjects\gs2\gsml\ss.txt
# print(os.mkdir(r"D:\f\yy",755)) ##创建一个目录
if not os.path.exists(lj1): #判断文件是否存在,不存在就添加,
os.mkdir(lj1
# print(os.rename(lj,lj1)) ##更改目录名称
# print(os.remove(lj1)) #删除文件
#print(os.path.abspath('bb.py')) #C:\Users\Administrator\PycharmProjects\gs2\gsml\gsbao\bb.py
固定格式:
import os # 导入os模块
# 1、获取当前文件 test.py 的绝对路径
# 使用 os 模块当中的path 》abspath 的内置变量 __file__获取当前文件的绝对路径
path1 = os.path.abspath(__file__)
print(path1)
# 2、dirname 可以获取当前路径上一级目录所在的绝对路径--B文件夹的绝对路径
path2 = os.path.dirname(path1)
print(path2)
# 结合来写:获得根目录绝对路径
A_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(A_DIR)
# 使用 join 拼接 根目录 + B 的绝对路径
B_DIR = os.path.join(A_DIR, "B")
print(B_DIR)
==============================================
re模块
(1)re模块:使用re模块实现
(2)什么是正则表达式?
正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符串来过滤的逻辑。
(3)正则表达式是一种文本模式;
(4)帮助我们检查字符是否与某种文本模式匹配
(5)re模块使python语言拥有全部的真正表达式功能,从python1.5版本起增加了re模块
(6)正则表达式的作用?
1.快速高效的查找和分析字符串,比对字符,也叫模式匹配,具有查找,比对,匹配,替换,插入,添加,删除等能力
2.实现编译查找,一般在日志处理文件时用的多
(7)认识正则表达式汇总特殊元素?
\d:数字0-9
\D:非数字
\s:空白字符
\n:换行符
\r:回车符
re模块数量词匹配:
符号^:表示的匹配字符以什么开头
符号$:表示的匹配字符以什么结尾
符号*:匹配*前面的字符0次或n次
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
符号?:匹配?前面的字符0次或1次
符号{m}:匹配前一个字符m次
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
正整数
(8)常用的查找方法:
1、findall
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
2.match
从第一个字符开始匹配,如果第一个字符不是要匹配的类型,则匹配失败得到一个none值
3、search
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
4、compile
编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
(9)
实战案例:
1、findall
场景1:查找存在的字符
import re
zf='abcdces'
s=re.findall("c",zf)
print(s) ['c', 'c']
场景2.查找不存在的字符
import re
zf='abcces'
s=re.findall("t",zf)
print(s) #返回空列表[]
2.match 匹配开头
场景1:查找是字符开头的字符
import re
zf='abcces'
s=re.match("a",zf)
print(s.span()) #(0, 1)显示索引位
场景1:查找是不是正确字符开头的字符
import re
zf='abcces'
s=re.match("v",zf)
print(s) #None 返回none值
3、search
场景1:存在的字符,从左往右查找找到了就停止
import re
zf='abcsqaces'
s=re.search("c",zf)
print(s)
场景2:不存在的字符
import re
zf='abcsqaces'
s=re.search("o",zf)
print(s) #none
=================================
实战:
(1)\d:数字0-9
import re
zf='abcs121qac23es'
s=re.findall('\d',zf)
print(s)
(2)\D:非数字
import re
zf='abcs121qac23es'
s=re.findall('\D',zf)
print(s)# ['a', 'b', 'c', 's', 'q', 'a', 'c', 'e', 's']
(3)\s:空白字符
import re
zf='abcs 121 qac 23es'
s=re.findall('\s',zf)
print(s)
(4)\n:换行符
import re
zf='abcs 121 \nqac 2\n3es'
s=re.findall('\n',zf)
print(s)
(5)\r:回车符
import re
zf='abcs 121 \nqac 23' \
'ea'
s=re.findall('\r',zf)
print(s)
(6)\w匹配字母数字 (小写w)
import re
zf='abcs 121\nqac 23ea'
s=re.findall('\w',zf)
print(s)
(7)\W匹配非字母数字
import re
zf='abcs 121\n@$qac 23ea'
s=re.findall('\W',zf)
print(s)
(8)符号^:表示的匹配字符以什么开头
import re
zf='abcs 121\n@$qac 23ea'
s=re.findall('^a',zf)
print(s)
(9)符号$:表示的匹配字符以什么结尾
import re
zf='abcs 121\n@$qac 23ea'
s=re.findall('a$',zf)
print(s)
(10)符号*:匹配*前面的字符0次或n次
zf='abcsaaa12aa1\n@$qac23eaaaaa'
s=re.findall('a*',zf)
print(s)
#结果:['a', '', '', '', 'aaa', '', '', 'aa', '', '', '', '', '', 'a', '', '', '', '', 'aaaaa', '']
(11)符号+:匹配+前面的字符1次或n次
import re
zf='abcsaaa12aa1\n@$qac23eaaaaa'
s=re.findall('a+',zf)
print(s)
结果:['a', 'aaa', 'aa', 'a', 'aaaaa']
(12)符号?:匹配?前面的字符0次或1次
import re
zf='abcsaaa12aa1\n@$qac23eaaaaa'
s=re.findall('a?',zf)
print(s)
结果:['a', '', '', '', 'a', 'a', 'a', '', '', 'a', 'a', '', '', '', '', '', 'a', '', '', '', '', 'a', 'a', 'a', 'a', 'a', '']
(13)符号{m}:匹配前一个字符m次
import re
zf='abcsaaa12aa1\n@$qac23eaaaaa'
s=re.findall('a{5}',zf)
print(s)
(14)符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
正整数
import re
zf='abcsaaa12aa1\n@$qac23eaaaaa'
s=re.findall('a{1,5}',zf)
print(s)
结果:['a', 'aaa', 'aa', 'a', 'aaaaa']
(15)用法
import re
zf='abcsaaaaa1\n@$qac23eaaaaa'
s=re.findall('(.+?)',zf)
print(s)
===============================
group 以str形式返回对象中match的元素
start 返回开始位置
end 返回结束位置
span 以tuple 形式返回范围
(1)案例:group 以str形式返回对象中match的元素
import re
zf='abcsaaaaa1\n@$qac23eaaaaa'
s=re.search('a',zf)
print(s.group())a
(2)
import re
zf='abcsaaaaa1\n@$qac23eaaaaa'
s=re.search('a',zf)
print(s.span())
#结果:(0, 1)
===========================
标志匹配符:
(1)re.i 忽略大小写
import re
zf='abABcsaaaaAsssa1\n@$qac23eaaaaa'
s=re.findall('a',zf,flags=re.I)
print(s)
===========================
sub 替换
import re
zf='abABcsaaa2aAsssa1\n@$qac23eaaaaa'
s=re.sub('2','dcs',zf,)
print(s)
==========================