一、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('登录失败')