經常使用的模塊
1、時間模塊
'''
在python的三種時間表現形式:
1.時間戳: 給電腦看的。
- 自1970-01-01 00:00:00到當前時間,按秒計算,計算了多少秒。
2.格式化時間(Format String): 給人看的
- 返回的是時間的字符串 2002-01-11
3.格式化時間對象(struct_time):
- 返回的是一個元組, 元組中有9個值:
9個值分別表明: 年、月、日、時、分、秒、一週中第幾天,一年中的第幾天,夏令時(瞭解)
時間模塊
'''
#一、獲取時間戳
import time
time.time()
print(time.time())
>>>1573885326.357931
#二、獲取格式化時間
import time
time.strftime()
'''
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
'''
#獲取年月日
time.strftime('%Y-%m-%d')
print(time.strftime('%Y-%m-%d'))
>>>2019-11-16
#獲取年月日時分秒
time.strftime('%Y-%m-%d %H-%M-%S')
print(time.strftime('%Y-%m-%d %H:%M:%S'))
>>>2019-11-16 14:29:21
import time
#三、獲取時間對象
time.localtime()#經過這個獲取一個時間對象
print(time.localtime())
>>>time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=14,
>>>tm_min=31, tm_sec=50, tm_wday=5, tm_yday=320, tm_isdst=0)
time_obj = time.localtime()#是一個容器,能夠用.方法
print(time_obj.tm_year)
>>>2019
print(time_obj.tm_mon)
>>>11
print(time_obj.tm_mday)
>>>16
res = time.localtime()
time.sleep(5)#模擬之前的時間和如今的如今的時間的一個延遲操做
#獲取當前時間的格式化時間
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
>>>2019-11-16 14:45:13
#將時間對象轉換爲格式化時間
print(time.strftime('%Y-%m-%d %H:%M:%S', res))#能夠經過這種操做格式化以前的時間
>>>2019-11-16 14:45:08
#將字符串格式的時間轉換成時間對象
res = time.strptime('2019-12-12', '%Y-%m-%d')
print(res)
>>>time.struct_time(tm_year=2019, tm_mon=12, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0,
tm_wday=3, tm_yday=346, tm_isdst=-1)
- datetime()基於time模塊的更高級的模塊
import datetime
#獲取當前年月日(*******)
datetime.date.today()
print(datetime.date.today())
#>>>2019-11-16
#獲取當前年月日時分秒(*******)
datetime.datetime.today()
print(datetime.datetime.today())
#>>>2019-11-16 15:08:58.116342
time_obj = datetime.datetime.today()
print(type(time_obj))
#>>><class 'datetime.datetime'>
print(time_obj.year)
#>>>2019
print(time_obj.month)
#>>>11
print(time_obj.day)
#>>>16
#UTC從0開始計算週一
print(time_obj.weekday())
#>>>5因此是6變成5
#ISO
print(time_obj.isoweekday())
#>>>6
#北京時間(*******)
print(datetime.datetime.now())
#>>>2019-11-16 15:19:14.398864
#格林威治時間(與北京時間差8個小時)
print(datetime.datetime.utcnow())
#>>>2019-11-16 07:20:15.837757
'''
日期/時間的計算 (*******)
日期時間 = 日期時間 「+」 or 「-」 時間對象
時間對象 = 日期時間 「+」 or 「-」 日期時間
'''
#日期時間
current_time = datetime.datetime.now()
print(current_time)
#>>>2019-11-16 15:29:59.851922
#時間對象
#獲取7天后的時間
time_obj = datetime.timedelta(days=7)
print(time_obj)
#>>>7 days, 0:00:00
#日期時間
later_time = current_time + time_obj
print(later_time)
#>>>2019-11-23 15:29:59.851922
# 時間對象 = 日期時間 「+」 or 「-」 日期時間
time_obj = later_time - current_time
print(time_obj)
#>>>7 days, 0:00:00
import random
#獲取任意整數的玩法,範圍本身設置
random.randint(1, 10)
print(random.randint(1, 10))
#>>>4
#>>>2
#>>>7
#獲取0-1之間的任意小數
random.random()
print(random.random())
#>>>0.1955805646689478
#>>>0.2569278638423781
#洗牌將可迭代對象中的值從新排序
list1 = ['yafeng', 'sean', 'tank', 'egon']
random.shuffle(list1)
print(list1)
#>>>['tank', 'sean', 'yafeng', 'egon']
#>>>['tank', 'sean', 'egon', 'yafeng']
#隨機獲取可迭代對象中的某一個值
random.choice(list1)
print(random.choice(list1))
#>>>tank
#需求製造一個隨機驗證碼
'''
需求:
大小寫字母、數字組合而成
組合5位數的隨機驗證碼
前置技術:
- chr(97) # 能夠將ASCII表中值轉換成對應的字符97對應a
# print(chr(101))
- random.choice
'''
#好比隨機獲取四位數的驗證碼
def get_code(n):
code = ''
# 每次循環只從大小寫字母、數字中取出一個字符
for line in range(4):#這裏要把4變成n就是任意長度字符串
#隨機獲取一個小寫字母(ascll對應的值是97-122)
res1 = random.randint(97, 122)
low_str = chr(res1)
#隨機獲取一個大寫字母(ascll對應的是65-90)
res2 = random.randint(65, 90)
upper_str = chr(res2)
#隨機獲取一個數字
number = str(random.randint(0, 9))
code_list = [low_str, upper_str, number]
random_code = random.choice(code_list)
code += random_code
return code
code = get_code(4)
print(code)
print(len(code))
#>>>ghj7
#>>>4
'''
os與操做系統交互的模塊
'''
import os
import time
#需求獲取當前項目根目錄
os.path.dirname(__file__)
print(os.path.dirname(__file__))
#>>>D:/python的pycharm/正式課/day15
#需求當前文件上一級的根目錄
DAY15_PATH = os.path.dirname(__file__)
BASE_PATH = os.path.dirname(DAY15_PATH)
print(BASE_PATH)
#>>>D:/python的pycharm/正式課
#路徑的拼接:拼接文件的'絕對路徑'
TEST_PATH = os.path.join(DAY15_PATH, 'yafeng666.txt')
print(TEST_PATH)
#>>>D:/python的pycharm/正式課/day15\yafeng666.txt注意最後一個是\
# 判斷「文件/文件夾」是否存在:若文件存在返回True,若不存在返回False
print(os.path.exists(TEST_PATH)) #True
print(os.path.exists(os.path.exists(DAY15_PATH))) #True
#判斷文件夾是否存在os.exists
#先刪除'yafeng666.txt'
print(os.path.exists(TEST_PATH)) #False
#>>>False
print(os.path.exists(os.path.exists(DAY15_PATH))) #True
#建立文件夾os.mkdir
DIR_PATH = os.path.join(DAY15_PATH, '各位老溼寫真集')
# os.mkdir(DIR_PATH)
# time.sleep(3)
#刪除文件夾只能刪除'空的文件夾'os.rmdir
# os.rmdir(DIR_PATH)#注意要寫把建立文件註釋之後才能夠執行刪除文件的操做,
# 不能夠同時既建立,又刪除
#獲取某個文件夾中全部文件的名字
teacher_list = os.listdir(r'D:\python的pycharm\正式課\day15\各位老溼寫真集')
print(teacher_list)
#>>>['egon老溼的寫真集', 'Jason老溼的寫真集', 'Sean老溼的寫真集', 'tank老溼的寫真集']
# enumerate(可迭代對象) ---> 獲得一個對象,對象有一個個的元組(索引, 元素)
res = enumerate(teacher_list)#一個對象
print(list(res))
# 讓用戶選擇文件
while True:
# 1.打印全部老師的做品
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'D:\python的pycharm\正式課\day15\各位老溼寫真集', file_name)
print(teacher_path)
with open(teacher_path, 'r', encoding='utf-8') as f:
print(f.read())
#>>>['egon老溼的寫真集', 'Jason老溼的寫真集', 'Sean老溼的寫真集', 'tank老溼的寫真集']
# [(0, 'egon老溼的寫真集'), (1, 'Jason老溼的寫真集'), (2, 'Sean老溼的寫真集'), (3, 'tank老溼的寫真集')]
# 編號:0,文件名:egon老溼的寫真集
# 編號:1,文件名:Jason老溼的寫真集
# 編號:2,文件名:Sean老溼的寫真集
# 編號:3,文件名:tank老溼的寫真集
# 請選擇想看老溼的做品---->(頭條影片:Jason寫真集) 編號:
# 請選擇想看老溼的做品---->(頭條影片:Jason寫真集) 編號:2
# D:\python的pycharm\正式課\day15\各位老溼寫真集\Sean老溼的寫真集
# 3333(假設這個內容就是寫真集)
import sys
import os
#獲取當前python解釋器的環境變量路徑
sys.path
print(sys.path)
#將當前項目添加到環境變量中去
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_PATH)
#獲取cmd終端的命令行 python3 py文件 用戶名 密碼
print(sys.argv) #返回的是列表[]
''' - sha_256(瞭解)
hashlib是一個加密模塊:
內置了不少算法
- MD5(*******): 不可解密的算法(2018年之前)
摘要算法:
- 摘要是從某個內容中獲取的加密字符串
- 摘要同樣,內容就必定同樣: 保證惟一性
- 密文密碼就是一個摘要
'''
import hashlib
md5_obj = hashlib.md5()
print(type(md5_obj))
#>>><class '_hashlib.HASH'>
str1 = '1234'
#****update中必定要傳入bytes類型*****
md5_obj.update(str1.encode('utf-8'))#編碼
#獲得一個加密後的字符串
res = md5_obj.hexdigest()
print(res)
#>>>81dc9bdb52d04dc20036dbd8313ed055這就是加密後的'1234'
#注意以上操做撞庫有可能會破解真實密碼
#因此爲了防止撞庫的可能,要加鹽
import hashlib
def pwd_md5(pwd):
md5_obj = hashlib.md5()
#'666'
# ****update中必定要傳入bytes類型*****
md5_obj.update(pwd.encode('utf-8'))
#創造鹽
sal = '亞峯真的帥'
#加鹽
md5_obj.update(sal.encode('utf-8'))
#獲得一個加密後的字符串
res = md5_obj.hexdigest()
return res
# user_str1 = f'yafeng:666'
#
# user_str2 =f'yafeng:{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()
res = pwd_md5(password)
print(res)
print(file_pwd)
#校驗用戶名與密碼是否一致
if username == file_user and file_pwd == res:
print('登陸成功')
else:
print('登陸失敗')