python内置模块

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

 

 

 

 

 

posted @ 2019-11-16 17:31  treeter  阅读(272)  评论(0编辑  收藏  举报