time模块
在python的三种时间表现形式:
1.时间戳: 给电脑看的。
- 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒。
2.格式化时间(Format String): 给人看的
- 返回的是时间的字符串 2002-01-11
3.格式化时间对象(struct_time):
- 返回的是一个元组, 元组中有9个值:
9个值分别代表: 年、月、日、时、分、秒、一周中第几天,一年中的第几天,夏令时(了解)
import time # 1.获取时间戳(******)计算时间时使用 print(time.time()) # (*******)1573887159.1747248
# 2.获取格式化时间 (*******)拼接用户时间格式并保存时使用 # 获取年月日 print(time.strftime('%Y-%m-%d')) # 获取年月日时分秒 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2019-11-16 14:50:08 # %X == %H:%M:%S print(time.strftime('%Y-%m-%d %X')) ## 2019-11-16 14:50:08 print(time.strftime('%X')) #14:54:25 # 获取年月 print(time.strftime('%Y/%m'))
3.获取时间对象 (****) print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=14, tm_min=56, tm_sec=15, tm_wday=5, tm_yday=320, tm_isdst=0) print(type(time.localtime())) # <class 'time.struct_time'> time_obj=time.localtime() print(time_obj.tm_year) # 2019 print(time_obj.tm_mon) # 11
res=time.localtime() time.sleep(5) #获取系统当前时间的格式化时间 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) # 2019-11-16 15:09:31 # 将时间对象转为格式化时间 print(time.strftime('%Y-%m-%d %H:%M:%S',res)) # 2019-11-16 15:09:26 # 将字符串格式的时间转为时间对象 res=time.strptime('2019-01-01','%Y-%m-%d') print(res) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
datetime模块
import datetime # 获取当前年月日 print(datetime.date.today()) # (*******) 2019-11-16 # # # 获取当前年月日时分秒 print(datetime.datetime.today()) # (*******) 2019-11-16 15:25:03.590939 # time_obj = datetime.datetime.today() print(type(time_obj)) print(time_obj.year) print(time_obj.month) print(time_obj.day) # # # 从索引0开始计算周一 # UTC print(time_obj.weekday()) # 0-6 # ISO print(time_obj.isoweekday()) # 1-7 # UTC时区 # 北京时间 print(datetime.datetime.now()) # (*******) # 格林威治 print(datetime.datetime.utcnow())
日期/时间的计算 (*******)
日期时间 = 日期时间 “+” or “-” 时间对象
时间对象 = 日期时间 “+” or “-” 日期时间
# 日期时间: current_time = datetime.datetime.now() print(current_time) # 2019-11-16 16:16:40.990100 # 时间对象 # 获取7天时间 time_obj = datetime.timedelta(days=7) print(time_obj) #7 days, 0:00:00 # 获取当前时间7天后的时间 # 日期时间 = 日期时间 “+” or “-” 时间对象 later_time = current_time + time_obj print(later_time) #2019-11-23 16:16:40.990100 # 时间对象 = 日期时间 “+” or “-” 日期时间 time_new_obj = later_time - current_time print(time_new_obj) #7 days, 0:00:00
random模块
import random #随机获取1—9中任意的整数 res = random.randint(1, 9) print(res) #默认获取0——1之间任意小数 res2 = random.random() print(res2) #洗牌 #将可迭代中的值进行乱序 list1 = ['红桃A', '梅花A', '红桃Q', '方块K'] random.shuffle(list1) print(list1) # ['方块K', '红桃A', '红桃Q', '梅花A'] #随机获取可迭代对象中的某一个值 list1 = ['红桃A', '梅花A', '红桃Q', '方块K'] res3 = random.choice(list1) print(res3) # 方块K
# 需求: 随机验证码 ''' 需求: 大小写字母、数字组合而成 组合5位数的随机验证码 前置技术: - chr(97) # 可以将ASCII表中值转换成对应的字符 # print(chr(101)) - random.choice ''' # 获取任意长度的随机验证码 def get_code(n): code = '' # 每次循环只从大小写字母、数字中取出一个字符 # for line in range(5): for line in range(n): # 随机获取一个小写字母 res1 = random.randint(97, 122) lower_str = chr(res1) # 随机获取一个大写字母 res2 = random.randint(65, 90) upper_str = chr(res2) # 随机获取一个数字 number = str(random.randint(0, 9)) code_list = [lower_str, upper_str, number] random_code = random.choice(code_list) code += random_code return code code = get_code(100) print(code) print(len(code))
OS模块
os与操作系统交互的模块
import os # 需求: 获取当前项目根目录 # 获取当前文件中的上一级目录 DAY15_PATH = os.path.dirname(__file__) print(DAY15_PATH) #D:/oldboy_edu/python_code/day15 # # # 项目的根目录,路径相关的值都用 “常量” BASE_PATH = os.path.dirname(DAY15_PATH) print(BASE_PATH) # # # 路径的拼接: 拼接文件 “绝对路径” TEST_PATH = os.path.join(DAY15_PATH, '老男孩老师们的写真集.txt') print(TEST_PATH) # D:/oldboy_edu/python_code/day15\老男孩老师们的写真集.txt #拼接路径,反斜杠没事,程序会根据电脑系统(window/linux)自动调整 # # # 判断“文件/文件夹”是否存在:若文件存在返回True,若不存在返回False print(os.path.exists(TEST_PATH)) # True print(os.path.exists(DAY15_PATH)) # True # # # 判断“文件夹”是否存在 print(os.path.isdir(TEST_PATH)) # False print(os.path.isdir(DAY15_PATH)) # True # # # 创建文件夹 DIR_PATH = os.path.join(DAY15_PATH, '老男孩老师们的写真集') os.mkdir(DIR_PATH) # 删除文件夹: 只能删除 “空的文件夹” os.rmdir(DIR_PATH) # os.remove('D:/oldboy_edu/python_code/day15/老男孩老师们的写真集.txt') #删除文件
# 获取某个文件夹中所有文件的名字 teacher_list = os.listdir(r'D:\项目路径\python13期\day15\老男孩老师们的写真集') print(teacher_list) # ['egon.txt', 'sean.txt', 'tank.txt'] # enumerate(可迭代对象) ---> 得到一个对象,对象有一个个的元组(索引, 元素) res = enumerate(teacher_list) # [(0, 'egon.txt'), (1, 'sean.txt'), (2, 'tank.txt')] print(list(res)) # 让用户选择文件 while True: # 1.打印所有老师的作品 for index, name in enumerate(teacher_list): print(f'编号: {index} 文件名: {name}') choice = input('请选择想看的老师作品-->(头条影片: Jason写真) 编号:').strip() # 2.限制用户必须输入数字,数字的范围必须在编号内 # 若不是数字,则重新选择 if not choice.isdigit(): print('必须输入数字') continue # 若是数字,往下走判断是否在编号范围内 choice = int(choice) # 判断如果不在列表范围内,则重新选择 if choice not in range(len(teacher_list)): print('编号范围错误!') continue file_name = teacher_list[choice] teacher_path = os.path.join( r'D:\项目路径\python13期\day15\老男孩老师们的写真集', file_name) print(teacher_path) with open(teacher_path, 'r', encoding='utf-8') as f: print(f.read())
sys模块
import sys import os # 获取当前的Python解释器的环境变量路径 print(sys.path) # 将当前项目添加到环境变量中 BASE_PATH = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_PATH)
import sys import os # 获取当前的Python解释器的环境变量路径 print(sys.path) print('==' * 100) # 将当前项目添加到环境变量中 BASE_PATH = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_PATH) print(sys.path) print('==' * 100) # 获取cmd终端的命令行 python3 py文件 用户名 密码 print(sys.argv) # 返回的是列表['py文件', '用户名', '密码'] cmd_list = sys.argv # 执行文件权限认证 if cmd_list[1] == 'ldc' and cmd_list[2] == '123': print('通过验证') print('开始执行逻辑代码') else: print('用户名或密码错误,权限不足!')
hashlib模块
- sha_256(了解)
hashlib是一个加密模块:
内置了很多算法
- MD5(*******): 不可解密的算法(2018年以前)
摘要算法:
- 摘要是从某个内容中获取的加密字符串
- 摘要一样,内容就一定一样: 保证唯一性
- 密文密码就是一个摘要
import hashlib md5_obj = hashlib.md5() # print(type(md5_obj)) str1 = '123' # update中一定要传入bytes类型数据 md5_obj.update(str1.encode('utf-8')) # 得到一个加密后的字符串 res = md5_obj.hexdigest() # 202cb962ac59075b964b07152d234b70 print(res) # 以上操作撞库有可能会破解真实密码 # 防止撞库问题: 加盐
import hashlib def pwd_md5(pwd): # md5_obj = hashlib.md5() # print(type(md5_obj)) str1 = pwd # '1234' # update中一定要传入bytes类型数据 md5_obj.update(str1.encode('utf-8')) # 创造盐 sal = '坦克怎么这么帅啊!' # 加盐 md5_obj.update(sal.encode('utf-8')) # 得到一个加密后的字符串 res = md5_obj.hexdigest() # eb1ca06cf5940e9fb6ef39100ec72c94 return res user_str2 = f'tank:{res}' with open('user.txt', 'w', encoding='utf-8') as f: f.write(user_str2) # 模拟用户登陆操作 # 获取文件中的用户名与密码 with open('user.txt', 'r', encoding='utf-8') as f: user_str = f.read() file_user, file_pwd = user_str.split(':') # 用户输入用户名与密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 1234 # 校验用户名与密码是否一致 if username == file_user and file_pwd == pwd_md5(password): # pwd_md5('1234') print('登陆成功') else: print('登陆失败')