模塊
模塊:??定義模(mo)塊(kuai)時可以把一個py文(wen)件或者一個文(wen)件夾(包)稱為(wei)模(mo)塊(kuai),
??????包(bao):里面得有__init__.py 文件
??模塊的導入:
??????1: ??執行的腳本和所需導入(ru)的模(mo)(mo)塊在同一目錄下時,且需要模(mo)(mo)塊里的很多功(gong)能: import 模(mo)(mo)塊 (as 別名) ?模(mo)(mo)塊.函(han)數(shu)()?
??????2: ??from 模塊(kuai) import 模塊(kuai) (as 別名(ming)) 模塊(kuai).函數()
??????3:???from 模塊.模塊 import 函數????函數()
__file__為執行腳本時后面的參數,可能給你的是相對路徑或絕對路徑 ??具體情況看在終端python解(jie)釋器后(hou)面的路徑名(ming)(參數),可以通過 os.path.abspath(__file__)將其統一轉換為絕對路徑
???????????????????????????os.getcwd()??_ _file_ _??syspath???????getcwd和 . 獲取的是同(tong)一個東(dong)西
?? 

sys模塊:
????sys.exit(0) :??結束腳本
????sys.argv() : ??獲取用戶輸入的參數??以列表存儲,sys.argx[0]為腳(jiao)本文件
import sys
if len(sys.argv) < 2:
print("參數不夠")
exit(0)
print(sys.argv[1])

????sys.path : python用來(lai)找模(mo)塊的路徑列表(biao) 腳本在哪個(ge)目錄(lu)sys.path中(zhong)就有此目錄(lu)

import sys
for i in sys.path:
print(i)
#導入模塊時,按照這里面的路徑去找
"""
d:\test\file1
D:\Python37\python37.zip
D:\Python37\DLLs
D:\Python37\lib
D:\Python37
D:\Python37\lib\site-packages
"""
##情況1: 導入test文件夾下面file1文件夾中file_test1文件夾中的a.py模塊
#由于sys.path中有 d:\test\file1 路徑則導入時可以繼續按這個路徑繼續往下找到file_tset1文件中的a.py模塊
#方法一:
import file1_test1.a
#方法二:
from file1_test1 import a
#方法三:(導入模塊中某個函數
from file1_test1.a import func
##情況2: 導入test文件夾下面file2中test2.py模塊
#由于file2在test文件夾下,且sys.path中沒有D:\test,所以要在sys.path中添加環境變量去找到file2
#第一步:由于file2和運行的腳本在同一test文件中所以得獲取當前腳本的絕對路徑,得到其共同的目錄
import os
a = os.path.dirname(os.path.abspath(__file__)) #得到D:\test __file__當前腳本的路勁,可能給到的是絕對路徑或相對路徑
sys.path.append(a)#將此路徑添加到sys.path中,以便找到模塊
#第二步:導入模塊
#方法一:(將file2中test2.py模塊全導入
import file2.test2
from file2 import test2
#方法二:(導入個別函數
from file2.test2 import func2
shutil模塊:??用于高級的文件操作和目錄處理
????shutil.rmtree(path) :????path得(de)是其絕對路徑??遞歸刪除整個文件目錄(lu),不可以是文件(刪除單(dan)個文件用os.remove)
#刪除整個目錄腳本
import sys,shutil
def get_file_path(path):
file_path = sys.argv[1]
shutil.rmtree(file_path)
######
import shutil
shutil.rmtree(r'D:\guohan\code\模塊\fsa')
????shutil.move():重命名(ming)(ming)(ming)并移動(優(you)先于os.rename) ????不僅(jin)可以重命名(ming)(ming)(ming)還可以移動位置, 要重命名(ming)(ming)(ming)的(de)文(wen)件(jian)路(lu)徑(jing)得(de)指明(ming)(不和(he)(he)腳(jiao)(jiao)本在同一目錄(lu)下時(shi)) 重命名(ming)(ming)(ming)后的(de)文(wen)件(jian)路(lu)徑(jing)也得(de)指明(ming) 不然(ran)會添加(jia)到腳(jiao)(jiao)本所在的(de)目錄(lu)下,指明(ming)了路(lu)徑(jing)即使不和(he)(he)腳(jiao)(jiao)本在同一目錄(lu)也能(neng)找到并重命名(ming)(ming)(ming)和(he)(he)移動位置
import shutil
shutil.move(r'D:\guohan\code\函數','hanshu')

import shutil
shutil.move(r'D:\guohan\code\模塊\hanshu',r'D:\guohan\code\函數')
##文件路徑寫全不然還是只改在模塊下
????shutil.make_archive: ??壓(ya)(ya)縮文件??格式:shutil.make_archive(要壓(ya)(ya)縮后的名字(可以含(han)路(lu)徑(jing)指定去哪,不然壓(ya)(ya)縮到(dao)腳本所在(zai)目(mu)錄),壓(ya)(ya)縮包格式(如(ru)zip),要壓(ya)(ya)縮的文件(指定絕對路(lu)徑(jing),以找到(dao)))

????shutil.unpack_archive:??解壓文件??格式:shutil.unpack_archive(要(yao)解壓包的(de)名(ming)字(同樣的(de)有路徑,因(yin)為(wei)先(xian)從sys,path里面找,沒有則報錯(cuo)), 要(yao)解壓的(de)路徑(若沒有該文件夾自(zi)動(dong)創建),壓縮包的(de)格式)


random模塊:
????random.randint(a,d) :??生成[a,b]間的整數
#隨機驗證碼
import random
none_list = []
for i in range(6):
data = random.randint(65,90)
none_list.append(chr(data))
print("".join(none_list))
????random.randrange(star,stop,step):
??????random.randrange(1,9,2):??隨機返回1357中的元素
????random.choice(seq): ??隨(sui)機(ji)返回可(ke)迭代對象中的(de)元素
????random.sample(seq,k):??隨機返回可迭代對象中(zhong)k個(ge)不重復元素(su),返回一個(ge)列(lie)表
getpass模塊:
????getpass.getpass() :??密碼不顯示
#密碼不顯示
import getpass
pwd = getpass.getpass('輸入密碼:')
print(pwd)

hashlib模塊:
????hashlib。md5() :??md5密碼加密
#md5密碼加密
import hashlib
def md5_pwd(pwd):
#加鹽
obj = hashlib.md5('hkhsdkfhjksdh'.encode('utf-8')) #將字符串以utf-8編碼進行壓縮(二進制->為字節)
obj.update(pwd.encode('utf-8')) #將密碼以utf-8編碼進行壓縮后加到所加的鹽后面進行加密
data = obj.hexdigest() #將加密的obj(二進制形式)轉成字符串
return data
num = input("輸入密碼:")
print(md5_pwd(num))
os模塊:
????1.os.stat(file).st_size:??讀取文(wen)件(jian)大小

????2.os.path.exists(path):??判(pan)斷路徑是否存在 存在返(fan)回(hui)(hui)True 不(bu)存在返(fan)回(hui)(hui)False

????3.os.path.abspath():??獲取(qu)絕對路徑,其(qi)不關心文(wen)件(jian)(jian)是否(fou)存(cun)在直接(jie)將文(wen)件(jian)(jian)拼接(jie)到(dao)腳(jiao)本運(yun)行(xing)目錄(lu)后??,代表腳(jiao)本運(yun)行(xing)的(de)目錄(lu)(即正(zheng)處目錄(lu)) ..代表上級目錄(lu)

????4.os.path.dirname():??獲(huo)取路徑的上一級(ji)目(mu)錄名(ming)

????5.os.path.join():??對路徑進行拼接
????6.os.listdir(path):??查(cha)看該目錄下第一層文件

????7。os.walk(path):??查案看(kan)該目錄所有層的(de)所有文件????會生(sheng)成(cheng)一個生(sheng)成(cheng)器得(de)循環去查看(kan)??a 為查看(kan)的(de)目錄 b 為此目錄下的(de)文件夾 c為此目錄下的(de)文件

????8.os.makedirs():??創(chuang)建目(mu)錄和子目(mu)錄

????9.os.remove():???刪除(chu)單個文件

????10.os.rename():????重命名

????11.os.getcwd():??獲取(qu)工(gong)作目錄
json,pickle模塊:??json是數據交換的格式,所有語言通用,是一種特殊的字符串,所有語言都認識的格式
?????????? pickle只有python用
????????json格式(shi)字符串最外層只能是(shi)[...]或者{...} ??里面則是(shi)被序列化的對象若(ruo)里面有字符串則必須是(shi)”“
????????pickle格式為二進制(zhi)的字(zi)節流
????????序列化(hua):python對象(除集合)——>json格式,pickle格式??dumps/dump??????json.dumps->str ??pickle.dumps->bytes
????????反序列(lie)化:json格式(shi)——>python對象(xiang)????loads/load
??????????注意(yi):python中集合,datetime類型(xing)不可以轉換成(cheng)json格式(shi)
?????????????python中元(yuan)組(zu)(zu)轉成json格式(shi)為[...] 反序列(lie)化時由于json里面沒有元(yuan)組(zu)(zu)所以得到的python對象沒有元(yuan)組(zu)(zu)
?????????????pthon對象中(zhong)含(han)有中(zhong)文序列化(hua)時得有json.dumps(v,ensure_ascii=False)
?????????????dump load (不常用) 操(cao)作(zuo)文件時(shi)只能操(cao)著單個對象,如load不能把整個json格式文件類容讀(du)出來
####序列化
import json
v = [1,'guohan','郭晗',(2,3),{'4':5}]
v1 = json.dumps(v)
print(v1)
>>>[1, "guohan", "\u90ed\u6657", [2, 3], {"4": 5}]
import json
v = [1,'guohan','郭晗',(2,3),{'4':5}]
print(v,type(v))
v1 = json.dumps(v,ensure_ascii = False)
print(v1,type(v1))
>>>
[1, 'guohan', '郭晗', (2, 3), {'4': 5}] <class 'list'>
[1, "guohan", "郭晗", [2, 3], {"4": 5}] <class 'str'>
import json
v = '[1,"guohan","郭晗",[2,3],{"4":5}]' ##json 格式的字符串
print(v,type(v))
v1 = json.loads(v)
print(v1,type(v1))
>>>
[1,"guohan","郭晗",[2,3],{"4":5}] <class 'str'>
[1, 'guohan', '郭晗', [2, 3], {'4': 5}] <class 'list'>
time模塊:
????1.time.time(): ??時間戳
????2.time.sleep():??程序暫停的(de)秒數
import time
def wrapper(param):
def inner(*a,**kwa):
v1 = time.time()
for i in range(3):
time.sleep(2)
print(i)
param(*a,**kwa)
v2 = time.time()
print(v2-v1)
return inner
@wrapper
def func():
print("func函數")
func()
>>>
0
1
2
func函數
6.014153003692627
??????3.time.strftime('%Y-%m-%d'):??格式化的字符串
import time
a = time.strftime('%Y-%m-%d')
print(a)
>>>2025-10-06
datetime模塊:
????from datetime import datetime
????1.datetime.now():??獲取(qu)當地時間(datatime類型) ??>>>2025-10-06 18:39:28.716035
????2.datetime.utcnow():??獲取(qu)世界時間
sttr time datetime 三者轉換關系:??????datetime 為中間樞紐 其可以進行時間的加減
????datetime時間加減:
#將字符串轉換為datetime時間
from datetime import datetime, timedelta
v = datetime.strptime('2025-10-6','%Y-%m-%d')
##datetime時間加減 timedelta
v1 = v + timedelta(days=4)
print(v1)
????
????三者轉換關系:

異常處理:
試運行try縮進的語句,若出錯,運行except Exception as e:后面的語句,避免程序出錯
????格式:??????try:
???????????????pass
?????????????except Exception as e:
???????????????pass ( print(‘失敗’)或者print( {e} ) )

i.isdecimal()即使不(bu)是數字都能(neng)進(jin)行判斷(duan)所以不(bu)會觸發except

content不(bu)能(neng)進(jin)行strip,異常被(bei)except捕獲執行print() 則不(bu)飄紅
