什么是模块?
Python 模块(Module),是一个 Python文件,以 .py 结尾。 包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数,类和变量,模块里也能包含可执行的代码。
1、包和目录的区别:包和模块可以被其他模块访问、但是目录不能被导入
2、新建一个包里面默认一个__init__.py模块、这个模块是用来初始化当前这个包下面的所有文件
3、有__init__.py模块才称为包
4、python 里面分为自带的模块和自己创建的模块
time模块
import time # 用import关键字导入time模块
time模块中常见的方法:
time() # 1970到现在的经过的秒数
ctime() # 固定格式的当前时间
sleep(3) # 休眠 单位是秒
asctime() # 转换为asc码显示当前时间
strftime() # 时间格式化输出
第一种导入模块的方法
import time # 用import关键字导入time模块
print(time.time()) # 1970年到当前时间的秒数 # 通过模块名.函数名来调用
print(time.ctime()) # 当前时间和日期
time.sleep(3) # 线程等待
print(time.asctime()) # 当前时间和日期
print(time.strftime('%Y-%m-%d-%H-%M-%S')) # 格式化输出日期 2021-06-12-11-12-39
第二种导入模块的方法
from time import time # 从time模块中导入time函数
from time import ctime # 从time模块中导入ctime函数
from time import sleep # 从time模块中导入sleep函数
print(time())
sleep(3)
print(ctime())
第三种导入模块的方法
from time import * # 通过time模块导入所有的函数
print(time())
print(ctime())
sleep(2)
print(asctime())
第四种导入模块的方法
导入具体的函数并且取别名、不管是函数、变量、常量、类、对象都可以导入
from time import sleep as a # 通过time模块导入sleep函数取别名为a
from time import asctime as s
print(s())
a(2)
print(s())
第五种导入模块的方法
from home.test import * # 通过项目包.模块名导入所有的内容(test.py文件)
print(num)
randdom模块
生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱 一组数据等
import random
# # random.random() 该方法是生成0-1之间的浮点数,但是能取到0,但是取不到1
print(random.random()) # 0.31373082178802303
# # random.randint(x,y) 该方法生成指定范围内整数,包括开始和结束值
print(random.randint(1,5))
# # random.randrange(x,y,step) 生成指定范围内的奇数,不包括结束值
print(random.randrange(1,10,2))
# # random.randrange(x,y,step) 生成指定范围内的偶数,不包括结束值
print(random.randrange(0,10,2))
# # random.sample(seq,n) 从序列seq中选择n个随机且独立的元素
list1 = ['test','dcs',11,88,9,34]
print(random.sample(list1,3)) # 随机从列表中选取3个元素组成新的列表
# # random.choice(test) 生成随机字符
name = '*^%%$^^&&*((12333'
print(random.choice(name))
# # random.shuffle(list) # 洗牌(随机数列)
list1 = ['test','dcs',11,88,9,34]
random.shuffle(list1)
print(list1)
MD5加密
# # hashlib.md5() MD5加密
import hashlib # 导入hashlib模块==》不可逆转的加密
md5 = hashlib.md5() # 通过hashlib模块中的md5函数创建一个对象
md5.update('123456'.encode('utf-8')) # 通过md5对象调用update函数对字符串'123456'加密
print(md5.hexdigest()) # 通过md5对象调用update函数生成一个16进制并且为32位的字符串:e10adc3949ba59abbe56e057f20f883e
将999999以下的数的md5值存入md5.txt文件中
import hashlib
with open('md5.txt', 'w') as f:
print('正在写入。。。')
for i in range(0, 999999):
md5 = hashlib.md5(str(i).encode()).hexdigest() + '\n'
f.write(md5)
print('写入完成。')
将123456的MD5(e10adc3949ba59abbe56e057f20f883e)值解密
def md5decrypt(num: str):
with open('md5.txt', 'r') as f:
result = 0
for line in f:
line = line.split('\n')
if num == line[0]:
print('解密成功,密文为:', result)
return result
else:
result += 1
print('解密失败!')
return None
if __name__ == '__main__':
r = md5decrypt('e10adc3949ba59abbe56e057f20f883e')
if r:
print('解密成功:', r)
else:
print('解密失败!')
String模块
生成26个大写字母和小写字母
import string
num1 = string.ascii_letters
print(num1) # 结果为: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
生成0-9的数字
import string
str1 =string.digits
print(str1) # 结果为:0123456789
1、使用random模块随机生成手机号码、自己定义手机号码开头的前三位
import random
import string
def cc():
lis=['157']
num=string.digits
for i in range(8):
a=random.choice(num)
lis.append(a)
print(''.join(lis))
cc()
2、用random模块随机生成6位数验证码
import random
a = range(3,100,2)
b = random.sample(a,9) # 从序列seq中选择n个随机且独立的元素
print(b)
print(random.randint(0, 9)) # 指定范围内整数,包括开始和结束值
# 方法一
import random
import string
def f():
num = string.ascii_letters + string.digits
l=[]
for i in range(6):
a=random.choice(num)
l.append(a)
print(''.join(l))
f()
# 方法二
import random
import string
def verify():
num = string.ascii_letters + string.digits
return ''.join(random.sample(num,6))
print(verify())
3、通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字符串
import random
import string
def verify():
num =string.ascii_letters+string.digits
return ''.join(random.sample(num,6))
import hashlib
def encode():
value = verify()
md5 = hashlib.md5()
md5.update(value.encode('utf-8'))
print(md5.hexdigest())
if __name__ == '__main__':
encode()
os模块
os模块提供了多数操作系统的功能接口函数。
当os模块被导入后,它会自适 应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编 程时,经常和文件、目录打交道,所以离不了os模块。
os模块中常见的方法:
import os
print(os.getcwd()) # 获取当前执行命令所在目录 I:\代码\dcs\lesson
print(os.path.isfile('I:\代码\dcs\lesson')) # 判断是否为文件
print(os.path.isdir('I:\代码\dcs\lesson')) # 判断是否是目录
print(os.path.exists('I:\代码\dcs\lesson')) # 判断文件或目录是否存在
print(os.listdir('I:\代码\dcs\lesson')) # 列出指定目录下的目录或文件
print(os.path.split('I:\代码\dcs\lesson')) # 分割文件名与目录
print(os.path.join('I:\代码\dcs','lesson')) # 连接目录与文件名或目录
os.mkdir(r'I:\代码\dcs\lesson\aa') # 创建一个目录
os.rename(r'I:\代码\dcs\lesson\aa',r'I:\代码\dcs\lesson\bb') # 更改目录名称
"""
1. 导入模块os
2. 使用模块内功能
"""
import os
# 1. rename(): 重命名
os.rename('1.txt', '10.txt')
# 2. remove(): 删除文件
os.remove('10.txt')
# 3. mkdir():创建文件夹
os.mkdir('aa')
# 4.rmdir(): 删除文件夹
os.rmdir('aa')
# 5. getcwd(): 返回当前文件所在目录路径
print(os.getcwd())
# 6. chdir():改变目录路径
os.mkdir('aa')
# 需求:在aa里面创建bb文件夹: 1. 切换目录到aa,2创建bb
os.mkdir('bb')
os.chdir('aa')
os.mkdir('bb')
# 7. listdir(): 获取某个文件夹下所有文件,返回一个列表
print(os.listdir())
print(os.listdir('aa'))
# 8. rename() -- 重命名文件夹 bb重命名为bbbb
os.rename('bb', 'bbbb')
# 需求1:把code文件夹所有文件重命名 Python_xxxx # 需求2: 删除Python_ 重命名:1, 构造条件的数据 2. 书写if
import os
# 构造条件的数据
flag = 2
# 1. 找到所有文件: 获取code文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)
# 2. 构造名字
for i in file_list:
if flag == 1:
# new_name = 'Python_' + 原文件i
new_name = 'Python_' + i
elif flag == 2:
# 删除前缀
num = len('Python_')
new_name = i[num:]
# 3. 重命名
os.rename(i, new_name)
re 正则模块
实现一个编译查找,一般在日志处理或者文件处理时用的比较多正则表达式主要用于模式匹配和替换工作。
预定义字符集匹配:
\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都是 正整数
re模块相关函数
1、match 从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
str1 = re.match('\d','5f8g76g07h07h08g7968k657') # 结果为5
str1 = re.match('\d','f8g76g07h07h08g7968k657') # 报错 没有这个属性组:'NoneType' object has no attribute 'group'
str1 = re.match('\d*','546f8g76g07h07h08g7968k657') # 546f8
str1 = re.match('\d+','546f8g76g07h07h08g7968k657') # 546
str1 = re.match('\d?','54687607?h07h08g7968k657') # 5
str1 = re.match('\d{4}','5464567f8g76g07h07h08g7968k657') # 5464
str1 = re.match('\d{2,5}','544g6876k0707087968k657') # 544
str1 = re.match('^5\d{2,5}','523g446f8g76g07h07h08g7968k657') # 523
str1 = re.match('^2\D{1,3}','2abc2546f8g76g07h07h08g7968k657') # 2abc
str1 = re.match('^2\D{2,5}$','2abce') # 2abce
str1 = re.match('^2\d{2,5}$','21233') # 21233
str1 = re.match('^1[3859][1358]\d{8}$','15366668888')
str1 = re.match('^1[389][1358]\d{8}$','15366668888') # 报错
str1 = re.match('^1[0-9][0-9]\d{8}$','15366668888')
str1 = re.match('^1[a-z][A-Z]\d{8}$','1aZ66688888')
print(str1.group()) # group()返回类型为字符串,表示返回整个匹配对象作为一个字符串
2、search 从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
import re
str1 = re.search('\d','k546f8g76g07h07h08g7968k657') # 5 前面是字母也可以匹配
str1 = re.search('\d+','546f8g76g07h07h08g7968k657') # 546
str1 = re.search('\d+','f546f8g76g07h07h08g7968k657') # 546
str1 = re.search('\d*','546f8g76g07h07h08g7968k657') # 546str1 = re.search('\d','akjonfelnl') # 546
print(str1.group())
3、findall 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
import re
str1 = re.findall('\d','a546f8g76g07h07h08g7968k657') # ['5', '4', '6', '8', '7', '6', '0', '7', '0', '7', '0', '8', '7', '9', '6', '8', '6', '5', '7']
str1 = re.findall('\d+','a546f8g76g07h07h08g7968k657') # ['546', '8', '76', '07', '07', '08', '7968', '657']
str1 = re.findall('\D+','a546f8g76g07h07h08g7968k657') # ['a', 'f', 'g', 'g', 'h', 'h', 'g', 'k']
str1 = re.findall('zhuwei','a546f8gzhuwei76g07h07h08g7968k657') # ['zhuwei']
str1 = re.findall('dcs(.+)dcs','dcs123abcdcs') # ['123abc']
str1 = re.findall('"value":"(.+)"','"value":"_abc123456"') # ['_abc123456']
str1 = re.findall('"(.+)":"_abc123456"','"value":"_abc123456"') # ['value']
str1 = re.findall('python','abc123') #[]
print(str1)
4、compile 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
import re
str1 = re.compile('python')
str2 = str1.findall('122pythonpython')
print(str2)
(.* 贪婪匹配、.*?非贪婪匹配)
import re
.*? 非贪婪匹配
str1 = re.findall('dcs(.*?)abc','dcs123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123abcdcs')
print(str1) # ['123', '9999dcs123', '999dcs123', '999dcs123']
.* 贪婪匹配
str1 = re.findall('dcs(.*)abc','dcs123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123abcdcs')
print(str1) # ['123abcdcs9999dcs123abcdcs999dcs123abcdcs999dcs123']