zoukankan      html  css  js  c++  java
  • 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('登陆失败')
    
  • 相关阅读:
    【BZOJ-3712】Fiolki LCA + 倍增 (idea题)
    【BZOJ-1941】Hide and Seek KD-Tree
    【BZOJ-2400】Spoj839Optimal Marks 最小割 + DFS
    【BZOJ-3709】Bohater 贪心
    【BZOJ-2342】双倍回文 Manacher + 并查集
    【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP
    【BZOJ-4568】幸运数字 树链剖分 + 线性基合并
    【BZOJ-4520】K远点对 KD-Tree + 堆
    【BZOJ-4127】Abs 树链剖分 + 线段树 (有趣的姿势)
    【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11892836.html
Copyright © 2011-2022 走看看