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_work\python_oldboyedu_learn\day15\os模块.py'))
# 单独判断‘文件夹’是否存在,只能判断‘文件夹’,没法判断‘文件’
print(os.path.isdir(DAY15_PATH))
print(os.path.isdir(TEST_PATH))
print(os.path.isdir(r'F:\python_work\python_oldboyedu_learn\day15\os模块.py'))
# 创建文件夹
DIR_PATH = os.path.join(r'F:\python_work\python_oldboyedu_learn\day15', '大帅的写真集')
# os.mkdir(DIR_PATH)
# 删除文件夹:只能删除‘空的文件夹’
# os.rmdir(DIR_PATH)
# 获取某个文件夹中所有文件的名字
DSB_list = os.listdir(r'F:\python_work\python_oldboyedu_learn\day15\大帅的写真集')
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_work\python_oldboyedu_learn\day15\大帅的写真集', 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
登录失败!
用户名不正确!
密码不正确!