zoukankan      html  css  js  c++  java
  • time,datatime,random,os,sys,hashlib模块

    time模块

    文件命名规范:不可以以模块名直接对文件命名 例如:time.py

    在python中的三种表现形式:

    1.时间戳:给电脑看的

    2.格式化时间(Format String)给人看到

    返回的是时间的字符串 2002-01-11

    格式化时间对象(struct_time)

    ​ -返回的是一个元组,元组中有9个值:

    ​ 9个值分别代表:年月日时分秒,一周中的第几天,一年中的第几天,夏令时

    时间模块:

    import time
    
    
    # 1.获取时间戳	计算时间的时候使用
    
    print(time.time())
    
    # 2.获取格式化时间	拼接用户时间格式并保存使用
    
    # 获取年月日
    
    print(time.strftime('%Y-%m-%d'))
    
    # 获取年月日时分秒
    
    print(time.strftime('%Y-%m-%d %H-%M-%S'))
    
    # %X =%H-%M-%S
    
    print(time.strftime('%Y-%m-%d %X'))
    
    # 获取年月
    
    print(time.strftime('%Y/%m'))
    
    
    
    1573885838.594383
    2019-11-16
    2019-11-16 14-30-38
    2019-11-16 14:30:38
    2019/11
    
    
    
    # 3.获取时间对象
    print(time.localtime())
    print(type(time.localtime()))
    time_obj = time.localtime()
    print(time_obj.tm_yday)
    print(time_obj.tm_year)
    print(time_obj.tm_hour)
    
    
    time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=14, tm_min=40, tm_sec=23, tm_wday=5, tm_yday=320, tm_isdst=0)
    <class 'time.struct_time'>
    320
    2019
    14
    
    res = time.localtime()
    time.sleep(5)
    
    # 获取当前哥前时间的格式化时间
    print(time.strftime('%Y-%m-%d %X', time.localtime()))
    # 将时间对象转换为格式化时间
    print(time.strftime('%Y-%m-%d %X', res))
    # 将字符串格式的时间转换为时间对象
    res = time.strptime('2019-01-01', '%Y-%m-%d')
    print(res)
    
    
    2019-11-16 14:46:34
    2019-11-16 14:46:29
    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())
    # 获取当前年月日时分秒
    print(datetime.datetime.today())
    time_obj = datetime.datetime.today()
    print(type(time_obj))
    print(time_obj.year)
    print(time_obj.month)
    print(time_obj.day)
    
    
    
    # UTC
    print(time_obj.weekday())   # 0-6
    # ISO
    print(time_obj.isoweekday())    # 1-7
    
    # UTC时区
    # 北京时区
    print(datetime.datetime.now())
    # 格林威治
    print(datetime.datetime.utcnow())
    
    	
    5
    6
    2019-11-16 15:00:43.409280
    2019-11-16 07:00:43.409280
    

    日期/时间的计算

    ​ 日期时间 =日期时间 + or - 时间对象

    ​ 时间对象 =日期时间 +or- 日期时间

    # 日期时间:
    current_time = datetime.datetime.now()
    print(current_time)
    
    # 时间对象
    # 获取七天时间
    time_obj = datetime.timedelta(days=7)
    print(time_obj)
    
    # 获取当前时间七天后的时间
    # 日期时间 =  日期时间 +or- 时间对象
    late_time = current_time + time_obj
    print(late_time)
    
    # 时间对象 = 日期时间  + or- 日期时间
    time_new_obj = late_time-current_time
    print(time_new_obj)
    
    
    2019-11-16 15:16:06.708308
    7 days, 0:00:00
    2019-11-23 15:16:06.708308
    7 days, 0:00:00
    

    random模块

    import random
    
    # 随机获取1-9中的任意的整数
    res = random.randint(1, 9)
    print(res)
    # 默认获取0-1之间任意小数
    res2 = random.random()
    print(res2)
    # 洗牌
    # 将可迭代对象中的值进行乱序(只能是集合)
    my_list = [1, 2, 3, 4]
    # print(random.shuffle(my_list))
    random.shuffle(my_list)
    print(my_list)
    # 随机获取可迭代对象中的某一个值
    list1 = [1, 2, 3, 4, 5]
    print(random.choice(list1))
    
    6
    0.32282242064458144
    [1, 2, 4, 3]
    5
    

    需求: 随机验证码
    '''
    需求:
    大小写字母、数字组合而成
    组合5位数的随机验证码

    前置技术:

    chr(97) # 可以将ASCII表中值转换成对应的字符

    print(chr(101))

    random.choice
    '''

    # 随机位数的验证码
    def get_code(num):
        code = ''
        # 每次循环只从大小写字母,数字中取出一个字符
        for line in range(num):
            # 先随机获取一个小写字母
            res1 = random.randint(97, 122)
    
            lower_str = chr(res1)
    
            # 随机获取一个大写字母
            res2 = random.randint(65, 90)
    
            upper_str = chr(res2)
    
            # 随机获取一个数字
            res3 = random.randint(0, 9)
    
            number = str(res3)
    
            code_list = [lower_str, upper_str, number]
    
            random_code = random.choice(code_list)
    
            code += random_code
    
        return code
    
    
    code = get_code(10)
    print(code)
    
    
    MI1If73hAK
    

    os模块

    os与操作系统交互的模块

    import os
    
    # 需求:获取当前项目根目录
    
    # 获取当前文件中的上一级目录
    DAY15_PATH = os.path.dirname(__file__)
    print(DAY15_PATH)
    
    # 项目的根目录,路径相关的值都用‘常量’   ps
    # BASE_PATH = os.path.dirname(DAY15_PATH)
    # print(BASE_PATH)
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    print(BASE_PATH)
    
    
    # 路径的拼接: 拼接文件   ‘绝对路径’
    TEST_PATH = os.path.join(DAY15_PATH, '大帅的写真集.txt')
    print(TEST_PATH)
    
    # 判断‘文件/文件夹是否存在: 若文件存在则返回True,若不存在则返回False’
    print(os.path.exists(TEST_PATH))
    print(os.path.exists(DAY15_PATH))
    print(os.path.exists(r'F:python_workpython_oldboyedu_learnday15os模块.py'))
    
    # 单独判断‘文件夹’是否存在,只能判断‘文件夹’,没法判断‘文件’
    print(os.path.isdir(DAY15_PATH))
    print(os.path.isdir(TEST_PATH))
    print(os.path.isdir(r'F:python_workpython_oldboyedu_learnday15os模块.py'))
    
    # 创建文件夹
    DIR_PATH = os.path.join(r'F:python_workpython_oldboyedu_learnday15', '大帅的写真集')
    # os.mkdir(DIR_PATH)
    
    # 删除文件夹:只能删除‘空的文件夹’
    # os.rmdir(DIR_PATH)
    
    # 获取某个文件夹中所有文件的名字
    DSB_list = os.listdir(r'F:python_workpython_oldboyedu_learnday15大帅的写真集')
    print(DSB_list)
    
    # enumerate(可迭代对象) ————————》得到一个对象,对象有一个个的元组(索引,元素)
    res = enumerate(DSB_list)
    print(list(res))
    
    
    
    # 需求:打印所有的作品,让用户自行选择编号,讲结果打印出来
    while True:
        # 打印出所有的编号文件
        for index, name in enumerate(DSB_list):
            print(f'编号:{index} 文件名:{name}')
            # 让用户选择编号
        choice = input('请选择想看的作品 选择编号:').strip()
        # 作出判断,限定用户必须输入的是数字,数字的范围要在编号范围内
        if not choice.isdigit():
            print('您必须输入数字')
            continue
    
        choice = int(choice)
        if choice not in range(len(DSB_list)):
            print('编号范围错误!')
            continue
    
        file_name = DSB_list[choice]
        DSB_path = os.path.join(r'F:python_workpython_oldboyedu_learnday15大帅的写真集', file_name)
    
        with open(DSB_path, 'r', encoding='utf-8') as f:
            print(f.read())
            break
            
    编号:0 文件名:__init__.py
    编号:1 文件名:唐嫣写真集
    编号:2 文件名:唐艺昕写真集.txt
    编号:3 文件名:张歆艺写真集
    请选择想看的作品 选择编号:2
    唐艺昕大宝贝
    超爱唐艺昕
    唐艺昕真妹妹        
            
    

    sys模块

    import sys
    import os
    
    # 获取当前的python解释器的环境变量路径
    print(sys.path)
    
    # 将当前项目添加到环境变量中
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_PATH)
    print(sys.path)
    
    # 获取cmd终端的命令行 python3 py文件 用户名 密码
    print(sys.argv)  # 返回的是列表
    
    
    
    
    ['F:\python_work\python_oldboyedu_learn\day15', 'F:\python_work\python_oldboyedu_learn', 'F:\PyCharm 2019.2.3\helpers\pycharm_display', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages', 'F:\PyCharm 2019.2.3\helpers\pycharm_matplotlib_backend']
    ['F:\python_work\python_oldboyedu_learn\day15', 'F:\python_work\python_oldboyedu_learn', 'F:\PyCharm 2019.2.3\helpers\pycharm_display', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages', 'F:\PyCharm 2019.2.3\helpers\pycharm_matplotlib_backend', 'F:/python_work/python_oldboyedu_learn']
    ['F:/python_work/python_oldbolibyedu_learn/day15/sys模块.py']
    

    hashlib模块

    hashlib 是一个加密模块:

    ​ 内置了很多算法

    ​ -md5 :不可解密的算法(2018年以前)

    摘要算法:

    ​ -摘要是从某个内容中获取的加密字符串

    ​ -摘要一样,内容就一定一样:保证唯一性

    ​ -密文密码就是一个摘要

    import hashlib
    
    md5_obj = hashlib.md5()
    # print(type(md5_obj))
    # print(md5_obj)
    str1 = '1234'
    # update中一定要传入bytes类型数据
    md5_obj.update(str1.encode('utf-8'))
    
    res = md5_obj.hexdigest()
    print(res)
    
    81dc9bdb52d04dc20036dbd8313ed055
    
    # 以上操作撞库有可能会破解真实密码
    # 防止撞库的问题:加盐
    
    import hashlib
    
    
    def pwd_md5(pwd):
        md5_obj = hashlib.md5()
        str1 = pwd
        md5_obj.update(str1.encode('utf-8'))
    
        # 创造盐
    
        sal = '唐艺昕我超级喜欢你哦'
        md5_obj.update(sal.encode('utf-8'))
    
        # 就能得到一个加密的字符串
        res = md5_obj.hexdigest()
        
        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()
    
    # 校验用户名与密码是否一致
    if username == file_user and file_pwd == pwd_md5(password):
        print('登录成功!')
    else:
        print('登录失败!')
        if username != file_user:
            print('用户名不正确!')
        if file_pwd != pwd_md5(password):
            print('密码不正确!')
            
    user.txt中的密码为:godlover:0291433999dba37a6e76e88802246fd8('1234'+'唐艺昕我超级喜欢你哦')
    
    
    请输入用户名:godlover
    请输入密码:1234
    登录成功!
    
    请输入用户名:godlover
    请输入密码:123456
    登录失败!
    密码不正确
    
    请输入用户名:godlover12
    请输入密码:1234
    登录失败!
    用户名不正确!
    
    请输入用户名:godloverwq
    请输入密码:45456
    登录失败!
    用户名不正确!
    密码不正确!
    
    
  • 相关阅读:
    多维DP UVA 11552 Fewest Flop
    思维/构造 HDOJ 5353 Average
    map Codeforces Round #Pi (Div. 2) C. Geometric Progression
    构造 Codeforces Round #Pi (Div. 2) B. Berland National Library
    贪心+优先队列 HDOJ 5360 Hiking
    贪心 HDOJ 5355 Cake
    LIS UVA 10534 Wavio Sequence
    又见斐波那契~矩阵快速幂入门题
    Big Christmas Tree(poj-3013)最短路
    poj 2449 Remmarguts' Date 第k短路 (最短路变形)
  • 原文地址:https://www.cnblogs.com/godlover/p/11872972.html
Copyright © 2011-2022 走看看