掌握自定义模块的创建
掌握模块的导入
了解Python中包的定义
掌握Python中常用的内置模块
了解Python中常用的第三方模块
模块的简介
- 在Python中一个后缀为 .py 的 Python 文件就是一个模块
- 模块中可以定义函数、类等
- 模块也可以比年函数、类、变量等名称相冲突的问题
- 模块不仅提高了代码的可维护性,同时还提高了代码的可重用性
- 在给模块命名的时候要求全部用小写字母,多个单词之间使用下划线 ’_‘ 进行分隔
- 如果自定义模块名称与系统内置模块名称相同,那么在导入时会优先导入自定义的模块
自定义模块
模块分为
- 系统内置模块:由开发人员编写好的模块,在安装Python解释器时一同安装成计算机
- 自定义模块:一个以 .py 结尾的文件就是一个模块,新建Python文件,实际上就是新建模块
自定义模块的作用:
- 规范代码,将功能相同的函数、类等封装到一个模块中,让代码更易于阅读
- 另一个目的与系统内置模块相同,即可以被其他模块调用,提高开发效率
模块的导入
import 导入方式的语法结构:
import 模块名称 [ as 别名 ]
如果所导入的模块名字长,就可以在后面用 as 起一个别名,使用时就用别名
from...import 导入方式的语法结构:(导入模块的某个 变量 / 函数 / 类
from 模块名称 import 变量 / 函数 / 类 / *(表示导入模块中所有)
#使用 import 模块名称 [as别名]
import my_info
print(my_info.name)
my_info.info()
print('-'*50)
import my_info as info#使用别名
print(info.name)
info.info()
print('-'*50)
#使用 from 模块名称 import 变量/函数/类/*
from my_info import name#只导入变量name
print(name)
#info()未导入 info() 函数,报错
print('-'*50)
from my_info import info#导入 info() 函数
info()
同时导入多个模块
可以用import [模块1],[模块2],[...],[模块n]
导入多个模块中具有同名的变量和函数,会使用后导入的模块
from my_info import *
from introduce import *
#导入模块中具有同名的变量和函数,会使用后导入的模块
info()
如果不想覆盖可以使用 import,然后打点调用(模块名.函数/类)
import my_info
import introduce
my_info.info()
introduce.info()
Python中的包
- 含有__init__.py 文件的文件夹(目录)
- 可以避免模块名称相冲突的问题
创建包,Python Package(Python 软件包)
包中自生成一个__init__.py
导入包,调用包中的函数时会先运行一次__init__.py模块的内容
import admin.my_admin as a#用包名.模块名导入
a.info()#会先运行__init__.py
print('-'*50)
from admin import my_admin as b
b.info()
print('-'*50)
from admin.my_admin import info
info()
Python中常用的内置模块
在安装Python解释器时与解释器一起安装进来的模块被称为系统内置模块,也被称为标准模块或标准库
标准库名称 | 功能描述 |
os模块 | 与操作系统和文件相关操作有关的模块 |
re模块 | 用于在Python的字符串中执行正则表达式的模块 |
random模块 | 用于产生随机数的模块 |
json模块 | 用于对高维数据进行编码和解码的模块 |
time模块 | 与时间相关的模块 |
datetime模块 | 与日期时间相关的模块,可以方便的显示日期并对日期进行运算的模块 |
random模块
random模块是Python中用于产生随机数的标准库
函数名称 | 功能描述 |
seed(x) | 初始化给定的随机数种子,默认为当前系统时间 |
random() | 产生一个 [ 0.0,1.0)之间的随机小数 |
randint(a,b) | 生成一个 [ a , b ] 之间的整数 |
randrange(m,n,k) | 生成一个 [ m , n )之间步长为 k 的随机整数 |
unifrom(a,b) | 生成一个 [ a , b ]之间的随机小数 |
choice(seq) | 从序列中随机选择一个元素 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 |
示例:
import random#导入random模块
random.seed(10)#设种子
print(random.random())#产生[0.0,1.0)之间的随机小数
print(random.randint(0,100))#随机10以内的整数
lst=[i for i in range(10)]
print(random.choice(lst))
random.shuffle(lst)
print(lst)
time模块
time模块是Python中提供的用于处理时间的标准库,可以用来进行时间处理、时间格式化和计时等
函数名称 | 功能描述 |
time() | 获取当前时间戳 |
localtime(sec) | 获取指定时间戳对应的本地时间的struct_time对象 |
ctime() | 获取当前时间戳对应的易读字符串 |
strftime() | 格式化时间,结果为字符串 |
strptime() | 提取字符串的时间,结果为steuct_对象 |
sleep(sec) | 休眠sec秒 |
格式化字符 | 日期 / 时间 | 取值范围 |
%Y | 年份 | 0001~9999 |
%m | 月份 | 01~12 |
%B | 月名 | January~December |
%d | 日期 | 01~31 |
%A | 星期 | Monday~Sunday |
%H | 小时(24h) | 00~23 |
%I | 小时(12h) | 01~12 |
%M | 分钟 | 00~59 |
%S | 秒 | 00~59 |
datetime模块
可以更方便的显示日期并对日期进行运算
类名 | 功能描述 |
datetime.datetime | 表示日期时间的类 |
datetime.timedelta | 表示时间间隔的类 |
datetime.date | 表示日期的类 |
datetime.time | 表示时间的类 |
datetime.tzinfo | 时区相关的类 |
re模块 正则表达式
元字符
具有特殊意义的专用字符,例如 "^" 和 "$" 分别表示匹配的开始和结束
元字符 | 描述说明 | 举例 | 结果 |
. | 匹配任意字符(除 \ n) | ' p\nytho\tn | p、y、t、h、o、\t、n |
\w | 匹配字母、数字、下划线 | 'python\n123' | p、y、t、h、o、n、1、2、3 |
\W | 匹配非字母、数字、下划线 | 'python\n123' | \n |
\s | 匹配任意空白字符 | 'python\t123' | \t |
\S | 匹配任意非空白字符 | 'python\t123' | p、y、t、h、o、n、1、2、3 |
\d | 匹配任意十进制数 | ’python\t123' | 1、2、3 |
限定符
用于限定匹配的次数
限定符 | 描述说明 | 举例 | 结果 |
? | 匹配前面的字符0次或1次 | colou?r | 可以匹配color或colour |
+ | 匹配前面的字符1次或多次 | colou+r | 可以匹配colour或colouu...r |
* | 匹配前面的字符0次或多次 | colou*r | 可以匹配color或colouu...r |
{n} | 匹配前面的字符n次 | colou{2}r | 可以匹配colouur |
{n,2} | 匹配前面的字符至少n次 | colou{2,}r | 可以匹配colouur或colouuu...r |
{n,m} | 匹配前面的字符至少n次,最多m次 | colou{2,4}r | 可以匹配colouur或colouuuur |
其他字符
其他字符 | 描述说明 | 举例 | 结果 |
区间字符[ ] | 匹配 [ ] 中指定的的字符 | [ . ? ! ] [ 0-9 ] | 匹配标点符号 . ? ! 匹配 0 到 9 数字 |
排除字符 ^ | 匹配不在 [ ] 中的指定字符 | [^0-9] | 匹配除 0 到 9 |
选择字符 | | 用于匹配 | 左右的任意字符 | \d{18}|\d{15} | 匹配15位身份证或18位身份证 |
转义字符 | 同Python中的转义字符 | \. | 将 . 作为普通字符使用 |
[\u4e00-\u9fa5] | 匹配 任意一个汉字 | ||
分组() | 改变限定符作用 | six|fourth (six|four)th | 匹配six或fourth 匹配sixth或fourth |
re模块函数
函数 | 功能描述 |
re.match(pattern,string,flags=0) | 用于从字符串开始位置进行匹配,如果起始位置匹配成功,结果为Match对象,否则为None |
re.search(pattern,string,flags=0) | 用于在整个字符串中搜索第一个匹配的值,如果匹配成功,结果为Match对象,否则为None |
re.findall(pattern,string,flags=0) | 用于在整个字符串搜索所有符合正则表达式的值,结果为列表 |
re.sub(pattern,repl,string.count,flags=0) | 用于实现对字符串中指定字串的替换 |
re.split(pattern,string,maxsplit,flags=0) | 字符串中的split()方法功能相同,都是分隔字符串 |
简单举例
match函数的使用
import re
pattern='\d\.\d+'#模式字符串
s='I study Python 3.11 every day'#待匹配字符串
match=re.match(pattern,s,re.I)#(模式字符串,待匹配字符串,忽略大小写)
print(match)#None
s2='3.11 Python I study every day'
match2=re.match(pattern,s2,re.I)#(模式字符串,待匹配字符串,忽略大小写)
print(match2)#<re.Match object; span=(0, 4), match='3.11'>
print('开始位置:',match2.start())#开始位置
print('结束位置:',match2.end())#结束位置
print('区间位置元素:',match2.span())
print('待匹配字符串:',match2.string)
print('匹配的数据:',match2.group())#输出匹配的数据
search函数使用
import re#导入re模块
pattern='\d\.\d+'#模式字符串
s='I study Python3.11 every day Python2.7 I love you'#待匹配字符串
match=re.search(pattern,s,re.I)#找到第一个符合规则的
print(match)
print('匹配的数据:',match.group())#3.11
findall函数使用
import re#导入re模块
pattern='\d\.\d+'#模式字符串
s1='I study Python3.11 every day Python2.7 I love you'#待匹配字符串
s2='4.10 Python I study every day'
s3='I study Python every day'
lst1=re.findall(pattern,s1)
lst2=re.findall(pattern,s2)
lst3=re.findall(pattern,s3)
print(lst1)#返回列表类型不需要.group()
print(lst2)#返回列表类型不需要.group()
print(lst3)#返回列表类型不需要.group()
sub函数使用
import re
pattern='黑客|破解|反爬'#模式字符串
s='我想学习Python,想破解一些VIp视频,Python可以实现无底线反爬吗'#待匹配字符串
new_S=re.sub(pattern,'XXX',s)#(模式字符串(不允许出现的字符),替换成'XXX',待匹配字符串)
print(new_S)