day-5OS与操作系统交互的模块,sys模块,加密模块
OS与操作系统交互的模块
- 需求: 获取当前项目根目录
- 获取当前文件中的上一级目录
- 项目的根目录,路径相关的值都用 “常量”
DAY15_PATH = os.path.dirname(__file__)
print(DAY15_PATH) # C:/python_project/学习/day15
获取项目根目录
project_path = os.path.dirname(os.path.dirname(__file__))
BASE_PATH = os.path.dirname(DAY15_PATH)
print(DAY15_PATH) # C:/python_project/学习/day15
判断“文件/文件夹”是否存在:若文件存在返回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
判断文件:
os.path.isfile()
创建文件夹
DIR_PATH = os.path.join(DAY15_PATH, '老男孩老师们的写真集')
os.mkdir(DIR_PATH)
删除文件夹: 只能删除 “空的文件夹”
os.rmdir(DIR_PATH)
获取某个文件夹中所有文件的名字
teacher_list = os.listdir(r'C:/python_project/学习/day15\老男孩的写真集')
print(teacher_list)
enumerate(可迭代对象) ---> 得到一个对象,对象有一个个的元组(索引, 元素)###获取可迭代对象索引,值。,可迭代对象如果是字典只取key。
res = enumerate(teacher_list) #返回对象。
print(list(res))
例题:用户选择文件:
teacher_list = os.listdir(r'C:/python_project/学习/day15\老男孩的写真集')
print(teacher_list)
res = enumerate(teacher_list)
print(list(res))
#让用户选择文件
while True:
# 打印所有老师的作品
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'C:/python_project/学习/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) #得到是列表,list【路径】
# 将当前项目添加到环境变量中
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_PATH)---》(当前项目的根目录)
# 获取cmd终端的命令行 python3 py文件 用户名 密码
print(sys.argv) # 返回的是列表['']
注意:通过python执行py文件时,后面跟着命令行
hashlib是一个加密模块:
内置了很多算法-
MD5(*******): 不可解密的算法(2018年以前)
摘要算法:
摘要是从某个内容中获取的加密字符串 -
摘要一样,内容就一定一样: 保证唯一性 -
密文密码就是一个摘要
import hashlib
def pwd_md5(pwd): #
md5_obj = hashlib.md5() #得到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_str1 = f'tank:1234'
#
# 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('登陆失败')
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
# 模拟用户登陆操作
# 获取文件中的用户名与密码
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('登陆失败')