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

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

????sys.path : python用來找模塊的路徑列表 腳本在哪個目錄sys.path中就有此目錄

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得是其絕對路徑??遞歸刪除整個文件目錄,不可以是文件(刪除單個文件用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():重命名并移動(優先于os.rename) ????不僅可以重命名還可以移動位置, 要重命名的文件路徑得指明(不和腳本在同一目錄下時) 重命名后的文件路徑也得指明 不然會添加到腳本所在的目錄下,指明了路徑即使不和腳本在同一目錄也能找到并重命名和移動位置
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: ??壓縮文件??格式:shutil.make_archive(要壓縮后的名字(可以含路徑指定去哪,不然壓縮到腳本所在目錄),壓縮包格式(如zip),要壓縮的文件(指定絕對路徑,以找到))

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


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): ??隨機返回可迭代對象中的元素
????random.sample(seq,k):??隨機返回可迭代對象中k個不重復元素,返回一個列表
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:??讀取文件大小

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

????3.os.path.abspath():??獲取絕對路徑,其不關心文件是否存在直接將文件拼接到腳本運行目錄后??,代表腳本運行的目錄(即正處目錄) ..代表上級目錄

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

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

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

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

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

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

????11.os.getcwd():??獲取工作目錄
json,pickle模塊:??json是數據交換的格式,所有語言通用,是一種特殊的字符串,所有語言都認識的格式
?????????? pickle只有python用
????????json格式字符串最外層只能是[...]或者{...} ??里面則是被序列化的對象若里面有字符串則必須是”“
????????pickle格式為二進制的字節流
????????序列化:python對象(除集合)——>json格式,pickle格式??dumps/dump??????json.dumps->str ??pickle.dumps->bytes
????????反序列化:json格式——>python對象????loads/load
??????????注意:python中集合,datetime類型不可以轉換成json格式
?????????????python中元組轉成json格式為[...] 反序列化時由于json里面沒有元組所以得到的python對象沒有元組
?????????????pthon對象中含有中文序列化時得有json.dumps(v,ensure_ascii=False)
?????????????dump load (不常用) 操作文件時只能操著單個對象,如load不能把整個json格式文件類容讀出來
####序列化
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():??程序暫停的秒數
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():??獲取當地時間(datatime類型) ??>>>2025-10-06 18:39:28.716035
????2.datetime.utcnow():??獲取世界時間
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()即使不是數字都能進行判斷所以不會觸發except

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

浙公網安備 33010602011771號