經常使用模塊

經常使用的模塊

1、時間模塊

  • time.time()
'''
在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
  • time.strftime()獲取格式化時間
#二、獲取格式化時間
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
  • struct_time()時間對象
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
  • random隨機模塊
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模塊
'''
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(假設這個內容就是寫真集)
  • sys模塊
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) #返回的是列表[]
  • hashlib
'''   - 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('登陸失敗')
相關文章
相關標籤/搜索