python之模組

何周钦發表於2024-11-12

一、模組的介紹
(1)python模組,是一個python檔案,以一個.py檔案,包含了python物件定義和pyhton語句
(2)python物件定義和python語句
(3)模組讓你能夠有邏輯地組織你的python程式碼段。
(4)把相關的程式碼分配到一個模組裡能讓你的程式碼更好用,更易懂
(5)模組能定義函式,類和變數,模組裡也能包含可執行的程式碼

二、模組的匯入
注意點:
(1)一個模組只要匯入一次,不管你執行多少次import,一次就可以
(2)模組不呼叫時是置灰狀態
1、
格式:import 模組名
使用:模組名.函式名
案例:
import time
print(1)
time.sleep(5) #休眠
print(2)
2、from 包名.模組名 import * (表示所有的函式)
from bao.aa import *
3、from 包名.模組名 import 函式名 (
表示所有的函式)
4、透過取別名來呼叫函式
格式:from 模組名 import 函式名 as 別名

模組講解:一、time模組

import time

1970年到現在經過的秒數

print(time.time()) #1651200498.799537
print(time.ctime()) #固定格式的當前時間
time.sleep(3)) # 休眠,也是強制等待
print(time.asctime()) #轉化為asc碼顯示當前時間
print(time.strftime(“%H-%M-%S %y-%m-%d”)) #時間戳:按照格式輸出內容:

二、random模組
生成隨機浮點數,幀數,字串,甚至幫助你隨機選擇列表中的一個元素,打亂一組資料等;
from random import *
print(random()) #生成0-1之間的浮點數,但是能取到0,不能取到1
print(randint(1,100)) #生成指定範圍內整數,包括開始值和結束值
print(randrange(1,100,2)) # 生成指定範圍內的奇數
print(randrange(0,100,2)) #生成指定範圍內的偶數
f=[1,2,3,6,7,2]
print(sample(f,3)) #生成從一個固定集合中選n個數隨機
print(choice(f)) #隨機生成一個字元
shuffle(f)
print(list(f))

string 模組
print(string.digits) #0123456789 所有的資料
print(string.hexdigits) #0123456789abcdefABCDEF
print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ #所有的小寫
print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz #所有小寫

print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ #所有的大小寫print(string.ascii_letters+string.digits) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 #所有大小寫,字母和數字


加密模組:
import hashlib
base64
MD5
一、加密演算法
md5、rsa、AES ,DES.BASE
DES 以64位為分組隊資料加密,加密和解密是同一演算法‘;
rsa加密 演算法:是一種非對稱加密演算法(在公開秘鑰加密和電子商業中rsa被廣泛使用)
AES rijndael 加密法對稱加密中最流行的演算法之一(AES為分組密碼)

案例:

base64加密

import base64
a=base64.b64encode(b"123456")
print(a) #b’MTIzNDU2’

base64解密

b=base64.b64decode(b"MTIzNDU2")
print(b) #b’123456’
備註:base64 編碼包含ascll是包含字元,二是二進位制資料

http://encode.chahuo.com/ 線上加解密

MD5加密

(1)md5 是一種演算法,可以將一個字串或檔案,md5後,就可以生成一個固定為128bit的串,這個串,基本上唯一;
(2)python2中有md5
(3)python3將MD5 歸納到hash 模組,譯作:‘雜湊’,直譯為‘雜湊’。
(4)md5 可以把任意長度的輸入,透過種hash演算法,變換成固定長度的輸出,該輸出就是雜湊值,也稱摘要值,,該演算法就是雜湊函式,也稱摘要函式。

(5)md5 是最常見的摘要演算法,速度快,生成結果是固定16位元組,通常用32位的16進位制字串表示。
(5)hash模組中包含MD5、sha1 ,sha256 ,sha512,等
(6)摘要;hash.digest() 返回摘要,作為二進位制資料字串值;
hash.hexdigeest 返回摘要,作為16進位制資料字串值
(7)案例1:
import hashlib
m=hashlib.md5() # 建立MD5物件
m.update(b"123456")
print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e

十六直徑轉換輸出
備註:
1、python中md5要加上b,python2不需要
2、md5 不能解密,但是加密是固定,關係是一一對應,可以被對撞。

案例1
import hashlib
m=hashlib.sha384()
m.update(b’123456’)
print(m.hexdigest())

案例2
import hashlib
m=hashlib.sha256()
m.update(b’123456’)
print(m.hexdigest())
案例:
import hashlib
m=hashlib.sha512()
m.update(b’123456’)
print(m.hexdigest())

-==================================
面試題:
(1)如果在工作中有很多資料,如果資料被改動,或傳遞別修改,看不出?
a、透過加密檢查資料
透過加密對資料進行加密處理,生成加密字元,如果有改動,字元就不相同
b、比對資料不一樣,如果加密的字元不相同,說明兩個資料不一致

os模組:

os模組提供了多數作業系統的功能介面函式。當os模組被匯入後,它會自適 應於不同的作業系統平臺,根據不同的平臺進行相應的操作,在python編 程時,經常和檔案、目錄打交道,所以離不了os模組。
os模組中常見的方法:
os.getcwd()獲取當前執行命令所在目錄
os.path.isfile()判斷是否檔案
os.path.isdir() #判斷是否是目錄
os.path.exists() #判斷檔案或目錄是否存在
os.listdir(dirname) #列出指定目錄下的目錄或檔案
os.path.split(name) #分割檔名與目錄
os.path.join(path,name) #連線目錄與檔名或目錄
os.mkdir(dir) #建立一個目錄
os.rename(old,new) #更改目錄名稱
os.remove() 刪除檔案

固定格式:
場景一:獲取當前操作物件中的的的一個專案的絕對路徑固定語法
import os

獲取專案路徑

p=os.path.abspath(os.path.dirname(os.getcwd()))
print()

獲取當前檔案的絕對路徑,直接透過spliit對目錄和檔案進行分割

file_path=os.path.split(os.path.realpath(file))
print(file_path)

(‘C:\Users\Administrator\PycharmProjects\gs1\bao’, ‘python006.py’)

獲取當前檔案的絕對路徑,直接透過spliit對目錄

file_path=os.path.split(os.path.realpath(file))[0]
print(file_path)

獲取當前檔案的絕對路徑,直接透過spliit對目錄

file_path1=os.path.split(os.path.realpath(file))[1]
print(file_path1)

獲取專案的絕對路徑

v=os.path.dirname(os.path.dirname(file))
print(v)

專案路徑和包進行拼接

hz_path=os.path.join(v,‘ss.txt’)
print(hz_path) #C:/Users/Administrator/PycharmProjects/gs1\ss.txt
print(os.path.abspath(file)) #獲取絕對路徑
print(os.path.dirname(os.path.abspath(file))) # 獲取當前專案路徑
python中re模組

一、re正則匹配基本介紹
正則匹配:使用re模組實現

1、什麼是正規表示式?
正規表示式是一種對字元和特殊字元操作的一種邏輯公式,從特定的字元中,用正則表達字元來過濾的邏輯。
2、正規表示式是一種文字模式;
3、正規表示式可以幫助我們檢查字元是否與某種模式匹配
4、re模組使pyhton語言用有全部的表示式功能
5、re表示式作用?
(1)快速高效查詢和分析字元比對自讀,也叫模式匹配,比如:查詢,比對,匹配,替換,插入,新增,刪除等能力。
(2)實現一個編譯檢視,一般在處理檔案時用的多

二、認識正規表示式中的特殊元素?
\d:數字0-9
\D:非數字
\s:空白字元
\n:換行符
\w 匹配字母數字
\W 匹配非字母數字
^:表示的匹配字元以什麼開頭
$:表示的匹配字元以什麼結尾
:匹配前面的字元0次或n次 eg:ab (* 能匹配a 匹配ab 匹配abb )
+:匹配+前面的字元1次或n次
?:匹配?前面的字元0次或1次
{m}:匹配前一個字元m次
{m,n}:匹配前一個字元m到n次(包括n次),m或n可以省略,mn都是
1、findall
從第一個字元開始查詢,找到全部相關匹配為止,找不到返回一個空列表[]

2、match
從第一個字元開始匹配,如果第一個字元不是要匹配的型別、則匹配失敗得到一個none值
注意:如果規則帶了’+’,則匹配1次或者多次,無’+'只匹配一次
3、compile(不考慮)
編譯模式生成物件,找到全部相關匹配為止,找不到返回一個列表[]
4、search
從第一個字元開始查詢、一找到就返回第一個字串,找到就不往下找,找不到則報錯

group 以str 形式返回物件中match元素
span 以tuple形式返回範圍

實戰案例:
場景一、findall
從第一個字元開始查詢,找到全部相關匹配為止,找不到返回一個空列表[]
(1)第一種情況查詢字元彙總存在的字元
import re # 匯入re模組
s=‘anbdckk12356afjmba’
c=re.findall(‘a’,s)
print© #[‘a’, ‘a’, ‘a’] 顯示查詢的字元
(2)第二種情況查詢不存在的字元
import re # 匯入re模組
s=‘anbdckk12356afjmba’
c=re.findall(‘z’,s)
print© #[] 顯示的是一個空了列場景

二、match 匹配開頭

從第一個字元開始匹配,如果第一個字元不是要匹配的型別、則匹配失敗得到一個值就報錯
第一種情況:開頭是匹配的是存在的字元
import re # 匯入re模組
s=‘anbdckk12356afjmba’
c=re.match(‘a’,s)
print(c.span()) #顯示結果是索引位:(0, 1)

第二種情況:開頭匹配的是不存在字元
import re # 匯入re模組
s=‘anbdckk12356afjmba’
c=re.match(‘z’,s)
print© #None

場景三、search
從第一個字元開始查詢、一找到就返回第一個字串,找到就不往下找,找不到則None
第一種情況:檢視的字元存在,返回字元的索引位
import re # 匯入re模組
s=‘anbdckk12356afjmba’
c=re.search(‘1’,s)
print(c.span()) #(7, 8)

第2種情況:檢視的字元不存在,返回字元的是none
import re # 匯入re模組
s=‘anb1dckk12356afjmba’
c=re.search(‘9’,s)
print© # None

(1)\d:數字0-9 ,返回的結果是列表的格式
案例:
import re # 匯入re模組
s=‘anb1dckk12356afjmba’
c=re.findall(‘\d’,s)
print© #[‘1’, ‘1’, ‘2’, ‘3’, ‘5’, ‘6’]
(2)\D:非數字
案例:
import re # 匯入re模組
s=‘anb1dckk12356afjmba’
c=re.findall(‘\D’,s)
print©
(3)\s:空白字元
import re # 匯入re模組
s=‘a nb1dck k12356a fjmba’
c=re.findall(‘\s’,s)
print© #[’ ', ’ ', ’ ', ’ ', ’ ']
(4)\n:換行符
案例:
import re # 匯入re模組
s=‘a nb1\ndck k123 \n 56a fjmba’
c=re.findall(‘\n’,s)
print© #[‘\n’, ‘\n’]
(5)\w 匹配字母數字
案例:
import re # 匯入re模組
s=‘a nb1*k123jmba’
c=re.findall(‘\w’,s)
print© #[‘a’, ‘n’, ‘b’, ‘1’, ‘k’, ‘1’, ‘2’, ‘3’, ‘j’, ‘m’, ‘b’, ‘a’]

(6)\W 匹配非字母數字
案例:
import re # 匯入re模組
s=‘a nb1k123jmba’
c=re.findall(‘\W’,s)
print© #[’ ', '’, ‘', '’, ‘', '’]

(7)^:表示的匹配字元以什麼開頭

案例:
import re # 匯入re模組
s=‘anb1*k123jmba’
c=re.findall(‘^a’,s)
print© #[‘a’]
KaTeX parse error: Expected 'EOF', got '#' at position 30: …案例: import re #̲ 匯入re模組 s='anb1…’,s)
print© #[‘b’]

$以xx結尾

import re
str1="b@@@cd 1ef\n%%2 ajhij\nk 3a"
f=re.findall("b$",str1)
print(f)
)匹配前面的字元0次或n次 eg:ab ( 能匹配a 匹配ab 匹配abb )
案例:
import re # 匯入re模組
s=‘anb1aa**k123aaaajmb’
c=re.findall('a’,s)
print©

[‘a’, ‘’, ‘’, ‘’, ‘’, ‘aa’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘aaaa’, ‘’, ‘’, ‘’, ‘’, ‘’]

+:匹配+前面的字元1次或n次
案例:
import re # 匯入re模組
s=‘anb1aa**k123aaaa*jmaaaaaab’
c=re.findall(‘a+’,s)
print© #[‘a’, ‘aa’, ‘aaaa’, ‘aaaaaa’]

?:匹配?前面的字元0次或1次
案例:
import re # 匯入re模組
s=‘anb1aak123aaaa*jmaaaaaab’
c=re.findall(‘a?’,s)
print©

{m}:匹配前一個字元m次
案例:
import re # 匯入re模組
s=‘abnb1abca
k123aaaa*jmaasaasaab’
c=re.findall(‘a{3}’,s)
print©#[‘aaa’]

{m,n}:匹配前一個字元m到n次(包括n次),m或n可以省略,mn都是

案例:
s=‘abnb1abca**k123aaaa*jmaaasasaab’
c=re.findall(‘a{2,3}’,s)
print© #[‘aaa’, ‘aa’, ‘aa’, ‘aa’]

re 識別符號:
flags=識別符號

(1)re.I(大寫的i) 不區分大小寫
import re # 匯入re模組
s=‘abnb1AabcaAk123jmaaasasaab’
c=re.findall(‘a’,s,flags=re.I)
print© #[‘a’, ‘A’, ‘a’, ‘a’, ‘A’, ‘a’, ‘a’, ‘a’, ‘a’, ‘a’, ‘a’]

sub 替換

import re # 匯入re模組
s=‘abnb1AabcaAk123jmaaasasaab’
c=re.sub(‘\d’,‘拱墅’,s)
print©

python標準模組之json

定義:json (java script object notation)是輕量級的文字資料交換格式

案例json:

json和字典 一樣

一、json模組可以實現json資料的序列化和反序列化

(1)序列化:將可存放在記憶體中的python 物件轉換成可物理儲存和傳遞的形式

實現方法:load() loads()

(2)反序列化:將可物理儲存和傳遞的json資料形式轉換為在記憶體中表示的python物件

實現方法:dump() dumps()

檢視 dump用法:ctrl+點選dump

1、由python物件格式化成為json()dumps

案例1:將字典格式轉化字元

j={'name':'zs','age':18,"no":["123","456"],"sex":"男"}
print(j)#{'name': 'zs', 'age': 18, 'no': ['123', '456'], 'sex': '男'}
print(type(j))#<class 'dict'>
jsonzfc=json.dumps(j,ensure_ascii=False)# 將一個字典轉換稱json
print(jsonzfc) #{"name": "zs", "age": 18, "no": ["123", "456"], "sex": "男"}
print(type(jsonzfc)) #<class 'str'>

備註:

1、python中的字典是單引號,字元是雙引號

2、字典是大寫True, 字元是小寫

================================================

dump 方法:
定義:往檔案中新增字元json
案例1:
j={'name':'zs','age':18,"no":["123","456"],"sex":"男","isonly":True}
print(j)
print(type(j))
jsonzfc=json.dumps(j,ensure_ascii=False)# 將一個字典轉換稱json
print(jsonzfc)
print(type(jsonzfc))

dump

json.dump(j,open("data.json","a"))
===================================================·

indent=4 indent 分隔符 ,排序

對json中字元 排序

sort_keys=True 排序;

三、 json string 轉化稱python物件

(1)字元型別轉換成字典

import _json
json1='{"age": 18, "isonly": true, "name": "zs", "no": ["123", "456"], "sex": "男"}'
print(type(json1))
jsgs=json.loads(json1)
print(type(jsgs)) #<class 'dict'>

(2)字元型別轉換成元組

案例:

json2='["a","b" ,{"no": 123, "sex": "男"}]'
print(type(json2))# <class 'str'>
listgs=json.loads(json2)
print(type(listgs)) #<class 'list'>

四、load檔案轉換成 物件方式

1、建立json格式:

{"age": 18, "isonly": true, "name": "zs", "no": ["123", "456"], "sex": "男"}

2、將 檔案中的json透過load轉換字典

import json
dxwj=json.load(open('aa.json','r',encoding="utf-8"))
print(type(dxwj))
print(dxwj)

相關文章