Python內置模塊語法學習
random、hashlib、json、time、datetime、os等內置模塊語法學習
模塊
簡單理解為就是一個.py后綴的一個文件
分為三種:
- 內置模塊:python自帶,可調用
- 第三方模塊:別人設計的,可調用
- 自定義模塊:自己編寫的,可調用
模塊之間苦于相互調用,是Python最高級別的組織單元,將程序代碼和數據封裝起來,可以重用。
導入方式:
- import 直接將一個模塊導入進來
- from xxx import xxx 從一個模塊中,導入具體的工具
理論上,python模塊中,任意一個地方都可以進行導入,但是規范上,我們開發潛規則上,將導入的部分放在python模塊文件最開始的位置編寫
代碼展示:
import random
from datetime import datetime
random模塊
- random.randint() 隨機生成一個范圍內的整數
(a,b),a到b的范圍內整數 - random.uniform() 隨機生成一個范圍內的小數
(a,b),a到b的范圍內整數 - random.choice() 隨機抽取列表中的一個元素
- random.sample() 隨機抽取列表中若干個元素
(list1,a) list1中抽a個 - random.shuffle() 隨機打亂列表中的元素
代碼展示:
import random
for i in range(2,5):s1 = random.randint(2,5)print(s1)
print('_'*50)
for i in range(2, 5):s2 = random.uniform(2,5)print(s2)
print('_'*50)
for i in range(2, 5):list1 = [2,3,4,5]s3 = random.choice(list1)print(s3)
print('_'*50)
for i in range(2, 5):list1 = [2,3,4,5]s4 = random.sample(list1,2)print(s4)
print('_'*50)
list1 = [2,3,4,5]
random.shuffle(list1)
print(list1)
運行結果:
hashlib模塊
該模塊主要是進行數據加密的作用。
常見的加密方式:
- sha256()【可逆】
- md5()【不可逆】
若想要對一個明文進行MD5加密的話,一般都不是直接進行加密,而是先進行加鹽操作,之后才會進行md5加密。
代碼展示:
import hashlib
info = '這里是要加密的:12345678'
# 創建hashlib中的加密對象,md5()加密方法
md5_obj = hashlib.md5()
# 設置確定要編碼的明文和加密使用的編碼
md5_obj.update(info.encode('UTF-8'))
# 調用函數,開始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通過md5加密后得到密文:{mi_wen}")
info = '這里是要加密的:12345678'
# 創建hashlib中的加密對象,md5()加密方法
sha256_obj = hashlib.sha256()
sha256_obj.update(info.encode('UTF-8'))
# 調用函數,開始加密
mi_wen = sha256_obj.hexdigest()
print(f"明文:{info},通過sha256加密后得到密文:{mi_wen}")
print('-'*50)
info = '這里是要加密的:12345678'
# 創建hashlib中的加密對象
md5_obj = hashlib.md5('---'.encode('UTF-8')) # 加鹽操作
# 設置編碼
md5_obj.update(info.encode('UTF-8'))
# 調用函數,開始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通過md5加密后得到密文:{mi_wen}")
json模塊
本質上是一個特殊格式的字符串,但是相比較于字符串而言,json是可以通過鍵獲取值的
判斷一個字符串是否符合json的格式:
- 看字符串是否是由雙引號括起來,若不是,那么該字符串轉不了json格式數據
- 若值是由小括號括起來的多個元素,也是不能夠轉json格式數據的
序列化和反序列化:
- 序列化:將代碼中的數據轉化成網絡中傳輸的數據流
【python中的字典數據 --> json格式的字符串】
json.dumps(dict,ensure_ascii=False) - 反序列化:將網絡中傳輸的數據流還原成代碼中的數據格式
【json格式的字符串 --> python中的字典數據】
json.loads(json)
代碼展示:
import json
#【python中的字典數據 --> json格式的字符串】
d1 = {"數值1":"1","數值2":"2","數值3":"3","數值4":"4"}
print(d1,type(d1))
d1 = {"數值1":"1","數值2":"2","數值3":"3","數值4":"4"}
d1 = json.dumps(d1,ensure_ascii=False)
print(d1,type(d1))
print("_"*50)
#若不是雙引號括起來,那么該字符串轉不了json格式數據
d2 = {'數值1': '1', '數值2': '2', '數值3': '3', '數值4': '4'}
d2 = json.dumps(d2,ensure_ascii=False)
print(d1,type(d2))
print("_"*50)
# 【json格式的字符串 --> python中的字典數據】
j ='''{"數值1":"1","數值2":"2","數值3":"3","數值4":"4"}'''
print(j,type(j))
j = json.loads(j)
print(j,type(j))
運行結果:
time 和 datetime模塊
- time.time()
生成時間戳格式對象,時間戳存儲時占用的字節相比較于格式化后的字符串而言,是少很多的。
代碼展示:
import time
from datetime import datetimet1 = time.time()
print(t1,type(t1))
運行結果:
- 時間戳 ->datetime ->格式化日期轉換
代碼展示:
import time
from datetime import datetimet1 = time.time()
print(t1,type(t1))
# 時間戳 -> datetime
t1 = datetime.fromtimestamp(t1)
print(t1,type(t1))
#datetime-> 年日月時分秒
t1 = datetime.strftime(t1,'%Y-%m-%d-%H:%M:%S')
print(t1,type(t1))
運行結果:
- 字符串 -> datetime-> 時間戳
代碼展示:
t1 = '2024-12-06-20:03:13'
print(t1,type(t1))
# 字符串 -> datetime
t1 = datetime.strptime(t1,'%Y-%m-%d-%H:%M:%S')
print(t1,type(t1))
# datetime-> 時間戳
t1 = t1.timestamp()
print(t1,type(t1))
運行結果:
- 使用datetime對象中的屬性可以時間獲取年月日時分秒
代碼展示:
import time
from datetime import datetime
t1 = 1733486593.9999
t1 = datetime.fromtimestamp(t1)
print(f"{t1.year}年{t1.month}月{t1.day},{t1.hour}時{t1.minute}分{t1.second}秒")
運行結果:
os模塊
使用os模塊中的功能操作文件或者文件夾
- os.path.exists()判斷目標是否存在
并且如果有\b或者\t,\n等特殊含義的命名,需要\來表現
- os.path.join()路徑拼接
- os.path.abspath(file)獲取當前文件所在的路徑
- os.path.dirname()獲取某一個文件所處的父級目錄路徑
- os.path.isfile()判斷一個路徑是否是文件
- os.mkdir()創建一個文件夾
- 刪除路徑
- os.remove()若目標路徑是一個文件
- os.rmdir()若目標文件是一個文件夾
代碼展示:
import os
# os.path.join()路徑拼接
ml = os.path.join('day09','data','test1')
print(ml)
print(os.path.exists(ml))
print('_'*50)
#獲取當前文件所在的路徑
ml1 = os.path.abspath(__file__)
print(ml1)
print(os.path.exists(ml1))
print('_'*50)
#獲取某一個文件所處的父級目錄路徑
ml2 = os.path.dirname(ml1)
print(ml2)
print('_'*50)
#判斷一個路徑是否是文件
print(os.path.isfile(ml1))
print(os.path.isfile(ml2))
print('_'*50)
#判斷一個路徑是否是文件夾
print(os.path.isdir(ml1))
print(os.path.isdir(ml2))
#創建一個文件夾
ml3 = os.path.join('data','ml3')
os.mkdir(ml3)
#刪除路徑,若目標路徑是一個文件
ml4 = 'E:\projects\pythonprojects\\base\day09\data\\test1'
os.remove(ml4)
#若目標文件是一個文件夾
os.rmdir(ml3)
運行結果:
、