Python幾個經常使用模塊

第1章 jsonpickle模塊
python

1.1什麼是序列化?

序列化就是把內存中數據類型轉換成一種能夠存儲到硬盤/基於網絡傳輸的中間格式linux

反序列化就是將中間格式轉成相對應的數據類型程序員

1.2爲什麼要序列化?

1.    持久化數據web

2.    數據跨平臺交互算法

1.3如何序列化?

Jsonshell

優勢:是一種通用的格式json

缺點:只能識別部分python數據類型安全

picklebash

優勢:能夠識別全部python的數據類型網絡

缺點:只能被python識別

1.4Json模塊使用:

序列化:

import json
dic={
'name':'jiang','age':20}
res=json.dumps(dic)

#將序列化結果寫入文件
with open('a.txt','wt',encoding='utf-8'as f:
    
f.write(res)

反序列化:

import json

with open('a.txt',mode='rt',encoding='utf-8'asf:
    dic=json.loads(f.read())
    
print(dic['name']

1.5dump/load的簡化用法:

import json
dic={
'name':'jiang','age':10}
with open('a.txt','wt',encoding='utf-8'as f :
    json.dump(dic
,f)
with open('a.txt','rt',encoding='utf-8'as f :
    dic=json.load(f)
    
print(dic)

1.6Pickle模塊使用

序列化:

import pickle
s={
1,2,3}
res=pickle.dumps(s)
with open('a.txt',mode='wb'as f:
    f.write(res)

反序列化:

with open('e.pkl',mode='rb'as f :
    data=f.read()
    res=pickle.loads(data)
    
print(res,type(res))

第2章 Hashlib模塊

2.1什麼是hash

Hash:hash是一種算法,該算法接受傳入的文本內容,通過hash運算獲得一串hash

2.2Hash值具有特色:

1.    若是傳入的內容相同,獲得的hash必定相同

2.    不能根據hash值反解出內容

3.    若是採用hash算法固定,那麼hash值的長度也是固定的

結合1+3===》文件完整性校驗

結合1+2===》傳輸密文密碼

2.3生成hash值:

import hashlib
m=hashlib.md5()
m.update(
'你好啊'.encode('utf-8'))
m.update(
'hello'.encode('utf-8'))
res=m.hexdigest()
print(res) #36b20ffdd2e10c6feef8ca866f2ef3b2
m.update('你好'.encode('utf-8'))
m.update(
'hello'.encode('utf-8'))
res=m.hexdigest()
print(res) #36b20ffdd2e10c6feef8ca866f2ef3b2

2.4密碼校驗功能:

import hashlib
pwd=
input('>>: ').strip
m=hashlib.md5()
m.update(pwd.encode(
'utf-8'))
print(m.hexdigest())

「加鹽」,實現較高安全性:

import hashlib

pwd=
input('>>: ').strip()

m=hashlib.md5()
m.update(
'ni'.encode('utf-8'))
m.update(pwd.encode(
'utf-8'))
m.update(
'hao'.encode('utf-8'))
print(m.hexdigest())

2.5文件完整性校驗:

注意:在文件較大時,生成功hash值也須要必定時間,使用for循環打印每一行,能夠節省內存使用率,防止文件過大程序掛掉,對於超大的文件也可使用只取某一段字符串來進行校驗,以達到節省內存的目的

import hashlib
m=hashlib.md5()
with open('f.txt','rb')as f:
    
for line in f:
        m.update(line)
    hash_v=m.hexdigest()
    
print(hash_v)

2.6擴展模塊:

import hmac
m=hmac.new(
'linux運維'.encode('utf-8'))
m.update(
b'nihao')
m.update(
b'hello')
print(m.hexdigest())

第3章 re模塊

# print(re.findall('alex','my name is alex alex is DSB'))

# print(re.findall('\w','hello123_ * =-'))

# print(re.findall('\W','hello123_ * =-'))


# print(re.findall('\s','hello1\t2\n3_ * =-'))
# print(re.findall('\S','hello1\t2\n3_ * =-'))
# print(re.findall('\d','hello1\t2\n3_ * =-'))
# print(re.findall('\D','hello1\t2\n3_ * =-'))

#
從開頭匹配alex,找到即返回
# print(re.findall('^alex','alex my name is alex alex is DSB'))

#
從結尾匹配DSB,找到即返回
# print(re.findall('DSB$','alex my name is alex alex is DSB '))

# .: 
表明匹配一個字符,這一個字符能夠是除了\n之外的任意字符,
# print(re.findall('a.c','abc a c a1c aaaaaaac a\nc a\tc',re.DOTALL))
#                                       a.c
#[]: 
表明匹配一個字符,這一字符必須是指定範圍內的,[0-9] [a-zA-Z]
# print(re.findall('a[0-9]c','a1c a2c aac aaaac aAc'))
# print(re.findall('a[A-Z]c','a1c a2c aac aaaac aAc'))
# print(re.findall('a[A-Za-z]c','a1c a2c aac aaaac aAc'))
# print(re.findall('a[A-Za-z][A-Za-z]c','a1c a2c aac aaaac aAc'))
# print(re.findall('a[+*/-]c','a-c a+c a*c a/c aaac a1c asadfac'))
# print(re.findall('a[^+*/-]c','a-c a+c a*c a/c aaac a1c asadfac'))

第4章 logging模塊

4.1日誌級別:

critical = 50

error = 40

warning = 30

info = 20

debug = 10

notset = 0#不設置

4.2默認爲warning級別,且默認打印到終端

import logging
logging.debug(
'dehug...')
logging.info(
'info...')
logging.warning(
'warning...')
logging.error(
'error...')
logging.critical(
'critical...')

4.3logging模塊四個對象:

logger:產生日誌對象

filter:過濾日誌的對象

handler:接受日誌而後控制打印到不一樣的地方,

formatter:能夠定製不一樣的日誌格式對象,而後又綁定給不一樣的handler對象使用

import logging
logger1=logging.getLogger(
'pay支付服務')
sh=logging.StreamHandler()
fh1=logging.FileHandler(
'a1.log',encoding='utf-8')
fh2=logging.FileHandler(
'a2.log',encoding='utf-8')

formatter1=logging.Formatter(
    
fmt='%(asctime)s - %(name)s - %(levelname)s - %(module)s:  %(message)s',
    
datefmt='%Y-%m-%d %H:%M:%S %p',
)
formatter2=logging.Formatter(
    
fmt='%(asctime)s : %(message)s',
    
datefmt='%Y-%m-%d %H:%M:%S %p',
)
logger1.addHandler(sh)
logger1.addHandler(fh1)
logger1.addHandler(fh2)

sh.setFormatter(formatter1)
fh1.setFormatter(formatter1)
fh2.setFormatter(formatter2)

logger1.setLevel(
10)
sh.setLevel(
10)
fh1.setLevel(
10)
fh2.setLevel(
10)
logger1.debug(
'測試信息')

4.4logging模塊指定全局配置,針對全部logger有效,控制打印到文件中:

可在logging.basicConfig()函數中可經過具體參數來更改logging模塊默認行爲,可用參數有:

filename:用指定的文件名建立FiledHandler(後邊會具體講解handler的概念),這樣日誌會被存儲在指定的文件中。

filemode:文件打開方式,在指定了filename時使用這個參數,默認值爲「a」還可指定爲「w」

format:指定handler使用的日誌顯示格式。

datefmt:指定日期時間格式。

level:設置rootlogger(後邊會講解具體概念)的日誌級別

stream:用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout或者文件,默認爲sys.stderr。若同時列出了filenamestream兩個參數,則stream參數會被忽略。

 

format參數中可能用到的格式化串:

%(name)s Logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文本形式的日誌級別

%(pathname)s 調用日誌輸出函數的模塊的完整路徑名,可能沒有

%(filename)s 調用日誌輸出函數的模塊的文件名

%(module)s 調用日誌輸出函數的模塊名

%(funcName)s 調用日誌輸出函數的函數名

%(lineno)d 調用日誌輸出函數的語句所在的代碼行

%(created)f 當前時間,用UNIX標準的表示時間的浮點數表示

%(relativeCreated)d 輸出日誌信息時的,自Logger建立以來的毫秒數

%(asctime)s 字符串形式的當前時間。默認格式是「2003-07-08 16:49:45,896」。逗號後面的是毫秒

%(thread)d 線程ID。可能沒有

%(threadName)s 線程名。可能沒有

%(process)d 進程ID。可能沒有

%(message)s用戶輸出的消息

4.5logging配置字典:

import os
import logging.config

定義三種日誌輸出格式開始

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'\
                  
'[%(levelname)s][%(message)s]'#其中namegetlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

定義日誌輸出格式結束

logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目錄

logfile_name = 'all2.log'  # log文件名

若是不存在定義的日誌目錄就建立一個
if not os.path.isdir(logfile_dir):
    os.mkdir(logfile_dir)

# log文件的全路徑
logfile_path = os.path.join(logfile_dirlogfile_name)

# log配置字典
LOGGING_DIC = {
    
'version'1,
    
'disable_existing_loggers'False,
    
'formatters': {
        
'standard': {
            
'format': standard_format
        }
,
        
'simple': {
            
'format': simple_format
        }
,
    
},
    
'filters': {},
    
'handlers': {
        
#打印到終端的日誌
        
'console': {
            
'level''DEBUG',
            
'class''logging.StreamHandler',  打印到屏幕
            
'formatter''simple'
        
},
        
#打印到文件的日誌,收集info及以上的日誌
        
'default': {
            
'level''DEBUG',
            
'class''logging.handlers.RotatingFileHandler',  保存到文件
            
'formatter''standard',
            
'filename': logfile_path,  日誌文件
            
'maxBytes'1024*1024*5,  日誌大小5M
            
'backupCount'5,
            
'encoding''utf-8',  日誌文件的編碼,不再用擔憂中文log亂碼了
        
},
    
},
    
'loggers': {
        
#logging.getLogger(__name__)拿到的logger配置
        
'': {
            
'handlers': ['default''console'],  這裏把上面定義的兩個handler都加上,即log數據既寫入文件又打印到屏幕
            
'level''DEBUG',
            
'propagate'True,  向上(更高levellogger)傳遞
        
},
    
},
}


def load_my_logging_cfg():
   logging.config.dictConfig(LOGGING_DIC) 
導入上面定義的logging配置
    
logger = logging.getLogger(__name__) 生成一個log實例
    
logger.info('It works!')  記錄該文件的運行狀態

if __name__ == '__main__':
    load_my_logging_cfg()

第5章 subprocess模塊

import subprocess
import time

obj=subprocess.Popen(
    
'ps aux',
    
shell=True,
    
stdout=subprocess.PIPE,
    
stderr=subprocess.PIPE
)
res=obj.stdout.read()
print(res.decode('utf-8'))
print('如下是錯誤結果')
res=obj.stderr.read()
print(res.decode('utf-8'))

第6章 time&datetime模塊

6.1python中一般有幾種方式來表示時間:

1.    時間戳(timestamp):一般來講,時間戳表示的是從1970110000:00開始按秒計算的偏移量,咱們運行typetime.time()),返回的是float類型

2.    格式化的時間字符串(formatString

3.    結構化的時間(struct_time):struct_time元組共有9個元素(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)

import time
print(time.time())#時間戳
print(time.strftime("%Y-%m-%d %X"))#格式化時間字符串
print(time.localtime())#本地時區的struct_time
print(time.gmtime())#UTC時區的struct_time

其中計算機認識的時間只能是時間戳格式,而程序員可處理的或者說人類可讀的是格式化時間字符串和結構化時間

第7章 random模塊:

import random
print(random.random())#大於0且小於1之間的小數
print(random.randint(1,4))#大於等於1且小於等於4之間的整數
print(random.randrange(1,5))#大於等於1且小於等於5之間的整數
print(random.choice([1,4,'u',6]))#1或者4或者u,或者6
print(random.sample([1,'23',[4,5]],2))#列表元素的任意兩個組合
print(random.uniform(1,5))大於1小於3的小數

#打亂item的列表順序,至關於洗牌
item=[1,3,5,7]
random.shuffle(item)
print(item)

Ø  生成隨機驗證碼:

 import random
def make_code(n):
    res=
''
   
for i in range(n):
        s1=
chr(random.randint(65,90))
        s2=
str(random.randint(0,9))
        res+=random.choice([s1
,s2])
   
return res
print(make_code(9))

 

第8章 os模塊:

OS模塊是與操做系統交互的一個接口

os.getwd()#獲取當前工做目錄,即當前python腳本工做餓目錄路徑

os.chdir()#改變當前腳本工做目錄,至關於shell下的cd

os.curdir()#返回當前目錄:(’.’

os.parfir #獲取當前目錄的父目錄字符串名(’..’

os.makedirsdirname1/dirname2)可生成多層遞歸目錄

os.removedirs('dirname1')    若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推

os.mkdir('dirname')    生成單級目錄;至關於shellmkdir dirname

os.rmdir('dirname')    刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shellrmdir dirname

os.listdir('dirname')    列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印

os.remove()  刪除一個文件

os.rename("oldname","newname")  重命名文件/目錄

os.stat('path/filename')  獲取文件/目錄信息

os.sep    輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"

os.linesep    輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n"

os.pathsep    輸出用於分割文件路徑的字符串win下爲;,Linux下爲:

os.name    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'

os.system("bash command")  運行shell命令,直接顯示

os.environ  獲取系統環境變量

os.path.abspath(path)  返回path規範化的絕對路徑

os.path.split(path)  path分割成目錄和文件名二元組返回

os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素

os.path.basename(path)  返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素

os.path.exists(path)  若是path存在,返回True;若是path不存在,返回False

os.path.isabs(path)  若是path是絕對路徑,返回True

os.path.isfile(path)  若是path是一個存在的文件,返回True。不然返回False

os.path.isdir(path)  若是path是一個存在的目錄,則返回True。不然返回False

os.path.join(path1[, path2[, ...]])  將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略

os.path.getatime(path)  返回path所指向的文件或者目錄的最後存取時間

os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間

os.path.getsize(path)返回path的大小

第9章 sys模塊:

sys.argv #命令行參數list,第一個元素是程序自己路徑

sys.exit #退出程序,正常退出時exit0

sys.version #獲取python解釋程序版本信息

sys.maxint #最大的int

sys.path #返回模塊的搜索路徑,初始化時使用pythonpath環境變量路徑

sys.platform #返回操做系統平臺名稱

相關文章
相關標籤/搜索