python内置模块
一、time模块
time模块是一个时间模块
在python的三种时间表现形式:
1.时间戳: 给电脑看的。
- 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒。
2.格式化时间(Format String): 给人看的
- 返回的是时间的字符串 2002-01-11
3.格式化时间对象(struct_time):
- 返回的是一个元组, 元组中有9个值:
9个值分别代表: 年、月、日、时、分、秒、一周中第几天,一年中的第几天,夏令时(了解)
1.获取时间戳(******)计算时间时使用
1 # 1.获取时间戳(******)计算时间时使用 2 time.time() 3 print(time.time())
2.获取格式化时间 (*******)拼接用户时间格式并保存时使用
1 # 获取年月日 2 """ 3 %Y Year with century as a decimal number. 4 %m Month as a decimal number [01,12]. 5 %d Day of the month as a decimal number [01,31]. 6 %H Hour (24-hour clock) as a decimal number [00,23]. 7 %M Minute as a decimal number [00,59]. 8 %S Second as a decimal number [00,61]. 9 """ 10 time.strftime('%Y-%m-%d %H:%M:%S') 11 print(time.strftime('%Y-%m-%d %H:%M:%S')) 12 # %X == %H:%M:%S 13 print(time.strftime('%Y-%m-%d %X'))
3.获取时间对象
1 time_obj = time.localtime() 2 print(time_obj) 3 print(time_obj.tm_year, time_obj.tm_mon, time_obj.tm_wday) 4 5 res = time.localtime() 6 time.sleep(2) 7 # 获取当前时间的格式化时间 8 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) 9 10 # 将时间对象转为格式化时间 11 print(time.strftime("%Y-%m-%d %H:%M:%S", res)) 12 13 # 将字符串格式的时间转为时间对象 14 res = time.strptime('2019-01-01', '%Y-%m-%d') 15 print(res)
二、datetime模块
1 # 获取当前年月日 2 print(datetime.date.today())
1 # 获取当前年月日时分秒 2 print(datetime.datetime.today()) 3 4 time_obj = datetime.datetime.today() 5 print(type(time_obj)) 6 print(time_obj.year, time_obj.month, time_obj.day)
1 # 从索引0开始计算周一 2 time_obj = datetime.datetime.today() 3 # UTC 4 print(time_obj.weekday()) # 0-6 5 # ISO 6 print(time_obj.isoweekday()) # 1-7
1 # UTC时区 2 # 北京时间 3 print(datetime.datetime.now()) 4 # 格林威治 5 print(datetime.datetime.utcnow())
日期/时间的计算 (*******)
日期时间 = 日期时间 “+” or “-” 时间对象
时间对象 = 日期时间 “+” or “-” 日期时间
1 # 当前时间日期 2 current_time = datetime.datetime.now() 3 print(current_time) 4 5 # 时间对象 6 # 获取七天时间 7 time_obj = datetime.timedelta(days=7, hours=1, minutes=12, seconds=30) 8 print(time_obj) 9 10 # 获取当前时间七天后的时间 11 later_time = current_time + time_obj 12 print(later_time) 13 14 time_new_obj = later_time - time_obj 15 print(time_new_obj)
三、random模块
1 # 随机获取1—9中任意的整数 2 res = random.randint(1, 10) 3 print(res)
1 # 默认获取0—1之间任意小数 2 res = random.random() 3 print(res) 4 5 res = int(res * 100) 6 print(res)
1 # 洗牌 2 # 将可迭代中的值进行乱序 3 list1 = ['1', '2', '3', '4', '5', '6'] 4 random.shuffle(list1) 5 print(list1)
# 随机获取可迭代对象中的某一个值 list1 = ['1', '2', '3', '4', '5', '6'] res = random.choice(list1) print(res)
需求:
大小写字母、数字组合而成
组合5位数的随机验证码
前置技术:
- chr(97) # 可以将ASCII表中值转换成对应的字符
# print(chr(101))
- random.choice
1 def get_code(n): 2 code_str = '' 3 for i in range(n): 4 # 大写字母 5 upper_num = random.randint(65, 90) 6 upper_c = chr(upper_num) 7 8 # 小写字母 9 lower_num = random.randint(97, 122) 10 lower_c = chr(lower_num) 11 12 # 数字 13 num = str(random.randint(0, 9)) 14 15 code_list = [upper_c, lower_c, num] 16 code = random.choice(code_list) 17 code_str += code 18 return code_str 19 20 code_str = get_code(7) 21 print(code_str)
四、os模块
os与操作系统交互的模块
1 import os 2 3 # 获取当前项目根目录 4 # 获取当前文件中的上一级目录 5 DAY15_PATH = os.path.dirname(__file__) 6 print(DAY15_PATH) 7 # 项目的根目录,路径相关的值都用 “常量” 8 DBSE_PATH = os.path.dirname(DAY15_PATH) 9 print(DBSE_PATH) 10 print(os.path.dirname(DBSE_PATH)) 11 12 # 路径的拼接: 拼接文件 “绝对路径” 13 TEST_PATH = os.path.join(DAY15_PATH, 'abc.txt') 14 print(TEST_PATH) 15 16 # 判断“文件/文件夹”是否存在:若文件存在返回True,若不存在返回False 17 print(os.path.exists(TEST_PATH)) 18 print(os.path.exists(DAY15_PATH)) 19 20 # 判断“文件夹”是否存在 21 print(os.path.isdir(TEST_PATH)) 22 print(os.path.isdir(DAY15_PATH)) 23 24 # 创建文件夹 25 DIR_PATH = os.path.join(DAY15_PATH,'测试') 26 os.mkdir(DIR_PATH) 27 28 # 删除文件夹:只能删除 “空的文件夹” 29 os.rmdir(DIR_PATH) 30 31 # 获取某个文件夹中所有文件的名字 32 test_list = os.listdir(r'D:\Python13期\day15\test') 33 print(test_list) 34 35 # enumerate(可迭代对象) ---> 得到一个对象,对象有一个个的元组(索引, 元素) 36 res = enumerate(test_list) 37 print(list(res))
1 #让用户选择文件 2 test_list = os.listdir(r'D:\Python13期\day15\test') 3 print(test_list) 4 while True: 5 # 1.打印test文件夹中所有的文件 6 for index, name in enumerate(test_list): 7 print(f'{index}\t{name}') 8 choice = input('选择:').strip() 9 if not choice.isdigit(): 10 print('输入数字') 11 continue 12 choice = int(choice) 13 if choice not in range(len(test_list)): 14 print('输入数字不对') 15 continue 16 file_name = test_list[choice] 17 18 test_path = os.path.join(r'D:\Python13期\day15\test', file_name) 19 print(test_path) 20 with open(test_path, 'r', encoding='utf-8')as f: 21 print(f.read())
五、sys模块
1 import sys 2 import os 3 4 # 获取当前的Python解释器的环境变量路径 5 print(sys.path) 6 7 # 将当前项目添加到环境变量中 8 BASE_PATH = os.path.dirname(os.path.dirname(__file__)) 9 sys.path.append(BASE_PATH) 10 print(sys.path) 11 12 # 获取cmd终端的命令行 python3 py文件 用户名 密码 13 print(sys.argv) # 返回的是列表['py文件', '用户名', '密码']
六、hashlib模块
- sha_256(了解)
hashlib是一个加密模块:
内置了很多算法
- MD5(*******): 不可解密的算法(2018年以前)
摘要算法:
- 摘要是从某个内容中获取的加密字符串
- 摘要一样,内容就一定一样: 保证唯一性
- 密文密码就是一个摘要
1 import hashlib 2 # 3 md5_obj = hashlib.md5() 4 print(md5_obj) 5 6 str1 = '123' 7 # update中一定要传入bytes类型数据 8 md5_obj.update(str1.encode('utf-8')) 9 10 # 得到一个加密后的字符串 11 res = md5_obj.hexdigest() 12 print(res) 13 # 202cb962ac59075b964b07152d234b70
以上操作撞库有可能会破解真实密码,解决办法就是加盐
1 def pwd_md5(pwd): 2 md5_obj = hashlib.md5() 3 str1 = pwd 4 # update中一定要传入bytes类型数据 5 md5_obj.update(str1.encode('utf-8')) 6 7 # 创造盐 8 str2 = 'abc' 9 # 加盐 10 md5_obj.update(str2.encode('utf-8')) 11 12 # 得到一个加密后的字符串 13 res = md5_obj.hexdigest() 14 return res
# 模拟用户登陆操作 # 获取文件中的用户名与密码 with open('user.txt', 'r', encoding='utf-8')as f: user_str = f.read() name_str, pwd_str = user_str.split(':') while True: # 用户输入用户名与密码 name = input('输入用户名:').strip() pwd = input('输入密码:').strip() pwd = pwd_md5(pwd) if name == name_str and pwd == pwd_str: print('登录成功') else: print('登录失败')