python常用内置模块(内附随机验证码程序、模拟登陆程序“密码为md5密文”)
python常用内置模块
1、time模块
time模块:普通时间模块
在python中的三种时间表现形式:
(1)time.time():时间戳:(机器看的)
从1970.01.01 00:00:00到当前时间,按秒计算,计算了多少秒
>>> time.time():时间戳,计算时间时需要使用(*****)
# 1.时间戳:计算时间时需要用import time
print(time.time())
执行结果:
1602680354.0047967
(2)time.strftime():格式化时间(Format String):(人看的)
返回的是时间的字符串:2020-10-14
>>> time.strftime():格式化时间,拼接用户时间格式并保存时使用(*****)
# 2.格式化时间:拼接用户时间格式并保存时使用"""
# 查看源码:
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
"""import time
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 查看当前年月日时分秒print(time.strftime("%Y-%m-%d %X")) # 查看当前年月日时分秒, %X == %H:%M:%S
print(f"现在时间是{time.strftime("%H:%M:%S")},你在哪?")
执行结果:
2020-10-14 21:08:142020-10-14 21:08:14
现在时间是21:0
8:14,你在哪?
(3)格式化时间对象(struct_time):
返回的是一个元组,元组中有9个值:
9个值分别代表:年、月、日、时、分、秒、一周中第几天、一年中第几天、夏令时
>>> time.localtime():获取时间对象
# 3.获取时间对象import time
time_obj
= time.localtime()print(time_obj.tm_year)print(time_obj.tm_mon)print(time_obj.tm_mday)print(time_obj.tm_hour)print(time_obj.tm_min)print(time_obj.tm_sec)
执行结果:
202010
14
21
16
24
>>> time.struct_time():将时间对象转化为格式化时间
# 4.将时间对象转为格式化时间import time
res
= time.localtime() # 时间对象time.sleep(5)
print(time.strftime("%Y-%m-%d %H:%M:%S", res))
print(time.strftime("%Y-%m-%d %H:%M:%S"))
执行结果:
2020-10-14 21:18:402020-10-14 21:18:45
2、datetime模块
datatime模块:基于time模块封装的更高级的时间模块
(1)datetime.date.today():获取当前年月日(*****)
import datetime
res
= datetime.date.today()print(res)
执行结果:
2020-10-14
(2)datetime.datetime.today():获取当前年月日时分秒(*****)
import datetime
res
= datetime.datetime.today()print(res)
执行结果:
2020-10-14 21:29:59.411155
(3)获取时间对象(*****)
import datetimetime_obj
= datetime.datetime.today() print(time_obj.year)print(time_obj.month)print(time_obj.day)print(time_obj.hour)print(time_obj.minute)print(time_obj.minute)print(time_obj.weekday()) # 从索引0开始计算周一 0-6print(time_obj.isoweekday()) # 从索引1开始计算周一 1-7
执行结果:
202010
14
21
32
32
2
3
(4)datetime.datetime.utcnow():获取UTC时间(*****)
import datetime
print(datetime.datetime.now()) # 北京时间print(datetime.datetime.utcnow()) # 格林威治
执行结果:
2020-10-14 21:35:14.2363662020-10-14 13:35:14.236366
(5)日期计算(*****)
日期/时间计算:
日期 = 日期 +/- 时间对象
时间对象 = 日期时间 +/- 日期时间
import datetimenow_time
= datetime.datetime.now() # 获取现在的时间time_obj = datetime.timedelta(days=7) # 获取七天时间对象
# 日期 = 日期 +/- 时间对象
later_time = time_obj + now_time # 获取当前时间7天后的时间
print(later_time)
# 时间对象 = 日期时间 +/- 日期时间time_new_obj = later_time - now_time
print(time_new_obj)
执行结果:
2020-10-21 21:40:09.7897717 days, 0:00:00
3、random模块
random模块:随机模块
(1)random.randint():随机取整值(*****)
随机从1-10中获取一个整数
import randomres
= random.randint(1, 9)print(res)
执行结果(多次执行才可看到效果):
7 # 第一次执行6 # 第二次执行
9 # 第三次执行
(2)random.random():默认获取0-1之间的小数
import randomres2
= random.random()print(res2)
执行结果(多次执行):
0.28873937658026116 # 第一次执行0.7381464343010954 # 第二次执行
0.841776539779358 # 第三次执行
(3)random.shuffle():将可迭代对象中的值进行乱序,类似于洗牌(不可变类型不可被乱序)
将list1中元素进行乱序
import randomlist1
= ["黑桃A", "红桃A", "梅花A", "方块A", "小王", "大王"]random.shuffle(list1)
print(list1)
执行结果(多次执行):
["红桃A", "梅花A", "方块A", "小王", "黑桃A", "大王"] # 第一次执行["梅花A", "小王", "黑桃A", "方块A", "红桃A", "大王"] # 第二次执行
["红桃A", "小王", "方块A", "梅花A", "黑桃A", "大王"] # 第三次执行
(4)random.choice():随机获取可迭代对象中的某一个值(*****)
随机取出list2中的值
import randomlist2
= ["黑桃A", "红桃A", "梅花A", "方块A", "小王", "大王"]res3
= random.choice(list2)print(res3)
执行结果(多次执行):
大王 # 第一次执行小王 # 第二次执行
红桃A # 第三次执行
4、random模块案例:随机验证码
"""需求:
1.大小写字母、数字组合而成
2.自定义位数的随机验证码
前置技术:
- chr() # 可以将ASCII表中的值转换成对应的字符
# print(chr(97))
- random.choice()
"""
ASCII码对照表(如下图):
写一个随机验证码程序,传入num参数可自定义验证码长度(案例num=4)
import random# 定义一个获取验证码的主程序def get_code(num):
# 定义一个空字符串,为拼接字符做准备code = ""
# 每次循环只从大小写字母、数字中取出一个
for i in range(num):
# 随机获取一个小写字母
res1 = random.randint(97, 122)
lower_str = chr(res1)
# 随机获取一个大写字母
res2 = random.randint(65, 90)
upper_str = chr(res2)
# 随机获取一个数字,将数字转化为字符串
res3 = str(random.randint(0, 9))
# 将大小写字母、数字放进列表中
code_list = [lower_str, upper_str, res3]
# 使用random.choice每次随机取出一个值
random_code = random.choice(code_list)
# 将每次取出的值进行拼接
code += random_code
# 返回验证码
return code
# 接受主程序返回的验证码
yzm = get_code(4)
# 打印验证码
print(yzm)
执行结果(多次执行):
ag47 # 第一次执行3p9y # 第二次执行
O71X # 第三次执行
5、os模块
os模块:与操作系统交互的模块
(1)os.path.dirname():获取当前文件的上一级目录
import os# 获取当前文件中的上一级文件夹目录LAST_DIR = os.path.dirname(__file__)
print(LAST_DIR)# 项目的根目录,路径相关的值都用“常量”。常量一般都用大写,无需修改的变量BASE_PATH = os.path.dirname(LAST_DIR)
print(BASE_PATH)
执行结果:
F:/python/python/demoF:
/python/python
(2)os.path.join():路径拼接,拼接目录的绝对路径
import osLAST_DIR
= os.path.dirname(__file__)TEST_PATH
= os.path.join(LAST_DIR, "test.txt")print(TEST_PATH)
执行结果:
F:/python/python/demo est.txt
(3)os.path.exists():判断文件/文件夹是否存在:若存在返回True,不存在返回False
os.path.isdir():判断文件夹是否存在
import osLAST_DIR
= os.path.dirname(__file__)BASE_PATH
= os.path.dirname(LAST_DIR)TEST_PATH
= os.path.join(LAST_DIR, "test.txt")# 判断文件/文件夹是否存在print(os.path.exists(TEST_PATH)) # False
print(os.path.exists(BASE_PATH)) # True
# 判断文件夹是否存在
print(os.path.isdir(TEST_PATH)) # False
print(os.path.isdir(BASE_PATH)) # True
执行结果:
FalseTrue
False
True
(4)os.mkdir():创建文件夹
os.rmdir():删除文件夹,只能删除空文件夹
import os# 创建文件夹DIR_PATH = os.path.join(LAST_DIR, "test")
os.mkdir(DIR_PATH)
# 删除文件夹:只能删除空文件夹os.rmdir(DIR_PATH)
(5)os.listdir():获取某个文件夹下所有文件的名字,返回一个列表
import osdir_list
= (os.listdir(r"F:pythonpythondemo"))print(dir_list)
执行结果:
["test.txt", "test2", "test3.py", "test4.txt"]
6、os模块案例:让用户选择文件,并打印出文件内容
补充:enumerate("可迭代对象", start=) ---> 得到一个对象,对象中有一个个元组
enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据序号
import osdir_list
= (os.listdir(r"F:pythonpythondemo"))res
= enumerate(dir_list, start=1)print(list(res))
执行结果:
[(1, "test.txt"), (2, "test2"), (3, "test3.py"), (4, "test4.txt")]
主程序:
import osdir_list
= (os.listdir(r"F:pythonpythondemo"))res
= enumerate(dir_list)while True:# 1.打印所有的文件名for index, name in enumerate(dir_list, start=1):
print(f"序号为{index},文件为{name}")choice
= input("请输入>>> ").strip()# 2.限制用户必须输入数字,数字范围必须在编号内# 如果不是数字,请重新输入
ifnot choice.isdigit():
print("必须输入数字...")
continue
# 若是数字,往下走继续判断是否在编号内
choice = int(choice)
# 如果不在列表中,重新选择
if choice notin range(len(dir_list)):
print("编号输入错误...")
continue
filename = dir_list[choice]
file_path = os.path.join(
r"F:pythonpythondemo", filename)
with open(file_path, "r", encoding="utf-8") as f:
print(f.read())
执行结果:
序号为1,文件为test.txt序号为2,文件为test2
序号为3,文件为test3.py
序号为4,文件为test4.txt
请输入
>>> 4hi, so cool
7、sys模块
sys模块:与python解释器交互的模块
(1)sys.path获取当前的python解释器环境变量
import sysprint(sys.path)
执行结果:
["F:pythonpythondemo", "F:pythonpython", "F:pythonpathJetBrainsPyCharm 2020.1pluginspythonhelperspycharm_display", "F:pythonpythonpythonScriptspython37.zip", "F:pythonpathPython3.7.0DLLs", "F:pythonpathPython3.7.0lib", "F:pythonpathPython3.7.0", "F:pythonpythonpython", "F:pythonpythonpythonlibsite-packages", "F:pythonpathJetBrainsPyCharm 2020.1pluginspythonhelperspycharm_matplotlib_backend"]
(2)sys.path.append():将当前项目添加到环境变量中(*****)
import sysimport osBASE_PATH
= os.path.dirname(os.path.dirname(__file__))sys.path.append(BASE_PATH)
(3)sys.argv:获取cmd终端的命令行
print(sys.argv) # 返回的是列表[""]
执行结果:
["F:/python/python/demo/sys模块.py"]
8、hashlib模块
hashlib模块:加密模块
明文密码:123456 ---> 123456
密文密码:123456 ---> e10adc3949ba59abbe56e057f20f883e
内置算法:
MD5(*****):不可解密的算法(2018年以前)
案例1:将123转化为MD5密码:
"""# hashlib.md5()源码:
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
"""import hashlib
str1
= "123"md5_obj
= hashlib.md5() # 得到一个md5 hash对象# update中一定要传入bytes类型数据,所以要将传入的字符串进行编码md5_obj.update(str1.encode("utf-8"))
# 得到一个123加密后的md5密文密码
res = md5_obj.hexdigest()
print(res)
执行结果:
202cb962ac59075b964b07152d234b70
案例2:案例1的操作,撞库(暴力破解)有可能会破解真实密码,为了防止暴力破解:“加盐”:相当于在原来的md5密文密码外又套了一层md5密文密码
import hashlibstr1
= "123"md5_obj
= hashlib.md5()# update中一定要传入bytes类型数据,所以要将传入的字符串进行编码md5_obj.update(str1.encode("utf-8")) # 202cb962ac59075b964b07152d234b70
# 创造盐
sal = "so cool"
# 加盐操作
md5_obj.update(sal.encode("utf-8"))
# 得到一个加密后的字符串res = md5_obj.hexdigest() # 86af03ea057db1711907de32695a3509
str2 = f"yangy:{res}" # 将用户名密码拼接,用户名:yangy,密码:123(文件中将要存的密码是123的md5密文密码“加盐”之后的md5密文密码)
# 用户名和密文密码保存到文件中with open("user.txt", "w", encoding="utf-8") as f:
f.write(str2)
9、hashlib模块案例:模拟登陆(密码为md5密文)
案例3:在8.案例2的基础下,写一个模拟登陆程序
# 模拟用户登录操作import hashlib
# 定义获取md5密文密码的函数
def get_md5(pwd):
md5_obj = hashlib.md5() # 获得一个md5 hash对象
# update中一定要传入bytes类型数据,所以要将传入的字符串进行编码
md5_obj.update(pwd.encode("utf-8"))
# 创造“盐”,这个“盐”一定要与创建md5密文密码时候的“盐”一致
sal = "so cool"
# “加盐”
md5_obj.update(sal.encode("utf-8"))
# 返回一个加密后的md5密文字符串
res = md5_obj.hexdigest()
return res
# 定义登录认证主程序
def login_auth():
# 读取密码文件中的用户数据
with open("user.txt", "r", encoding="utf-8") as f:
info = f.readline()
# 解压赋值获取文件中的用户名和md5密文密码
file_user, file_pwd = info.split(":")
# 用户输入用户名密码
username = input("请输入账户:").strip()
password = input("请输入密码:").strip()
# 判断用户输入的用户和密码与文件中的是否相符
if username == file_user and get_md5(password) == file_pwd: # get_md5(用户输入的密码)
print("登陆成功!")
else:
print("登录失败!")
# 执行登录认证主程序,用户名:yangy,密码:123
login_auth()
执行结果:错误输入用户名密码
执行结果:正确输入用户名密码
以上是 python常用内置模块(内附随机验证码程序、模拟登陆程序“密码为md5密文”) 的全部内容, 来源链接: utcz.com/z/530166.html