day19(random,json,pickle,hashlib,shutil,hmac,shelve 模塊)

来源:https://www.cnblogs.com/HZLS/archive/2019/05/08/10835178.html
-Advertisement-
Play Games

一,複習 二,random模塊: 三,json模塊: 四,pickle模塊: 五,shelve 模塊: 六,hashlib加密模塊: 七,hmac 加密模塊: 八,shutil 模塊: ...


一,複習

'''
項目開發規範
ATM
    -- bin: 可執行文件
        # run.py
        import os
        import sys
        BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # ATM文件夾
        sys.path.append(BASE_DIR)
        
        from core import main
        
    -- core:核心代碼
        # main.py
        from setting import settings
        from lib import mp
        
        # login.py
        # from bin.run import BASE_DIR
        # u_info = os.path.join(BASE_DIR, 'db', 'user.info')
        from setting.settings import USER_INFO
        
        # register.py
        # from bin.run import BASE_DIR
        # u_info = os.path.join(BASE_DIR, 'db', 'user.info')
        from setting.settings import USER_INFO

    -- db:資料庫
        # user.info
        
    -- setting:配置
        # settings.py
        from bin.run import BASE_DIR
        USER_INFO = os.path.join(BASE_DIR, 'db', 'user.info')
        
        
    -- lib:公用模塊
        # mp文件夾
            __init__.py
            m1.py
            m2.py
        
    
    -- log:日誌
    -- static:靜態資源
    -- interface:介面


2.時間: time calendar datetime

3.系統 sys, os, os.path

4.sys.argv:結束文件作為腳本執行傳入的參數
cmd:python3 py腳本 參數們
'''

 

二,random模塊:

'''
(0,1):random.random()
[1,10]:random.randint(1,10)
[1,10):random.randrange(1,10)
(1,10):random.uniform(1,10)
單例集合隨機選擇1個:random.choice(item)
單例集合隨機選擇n個:random.sample(item,n)
洗牌單例集合:random.shuffle(item)
'''''

import random

for i in range(10):
    print(random.random())      #0.7752135892961534  ... 0.4973644933984488

for i in range(10):
    print(random.randint(1,10)) #[1,10]整數

for i in range(10):
    print(random.randrange(1,10)) #[1,9]整數

for i in range(10):
    print(random.uniform(1,10))     #(1,10)小數

item = [1, 2, 3, 4, 5]
for i in range(10):
    print(random.choice(item))  #隨機選擇一個,選擇10次

for i in range(10):
    print(random.sample(item,3))    #[5, 2, 1] ....[2, 4, 3]

# 打亂
random.shuffle(item)    #[4, 3, 1, 5, 2]
# print(item)


'''#驗證碼案例:'''
#part1
def random_code0(num):
    code = ''
    for i in range(num):
        d = random.randint(65, 90)   # 小寫字母
        x = random.randint(97, 122)  # 大寫字母
        n = random.randint(0, 9)
        code += random.choice([chr(d),chr(x),str(n)])
    return code
res = random_code0(10)
print(res)

#part2
def random_code1(num): code = '' for i in range(num): choose = random.randint(1,3) if choose == 1: c = chr(random.randint(65,90)) elif choose == 2: c = chr(random.randint(90,122)) else: c = str(random.randint(0,9)) code += c return code res1 = random_code1(10) print(res1) #print(ord(']')) #93 #part3 def random_code2(num): #每個字母只會出現一次 target = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM~!@#$%^&*()_+' code_list = random.sample(target,num) return ''.join(code_list) res2 = random_code2(10) print(res2)

 

三,json模塊:

'''
json語言,就是一種語法規範的字元串,用來存在數據的,完成各種語言之間的數據交互
1,就是{} 與 []的組合,{}存放雙列信息(類比字典),[]存放單列信息(類比列表)
2,{}的key必須是字元串,且必須用 "" 包裹
3,{}與[]中支持的值得類型有:dict| list | int | float | bool | null | str 
'''
json_str = '{"info" : 1,"msg": [1 ,"a" , true , false , null , 3,14]}' obj = json.loads(json_str)
#在python環境下會轉換為python下的格式 print(obj, type(obj)) #{'info': 1, 'msg': [1, 'a', True, False, None, 3, 14]} <class 'dict'> ''' 序列化:將對象轉換為字元串 dumps:將對象直接序列化成字元串 ''' obj = {'name':'Owen',"age":18,'height':180,"gender":""} r1 = json.dumps(obj,ensure_ascii=False) #取消預設ascii編碼,,同該文件的編碼utf-8,py3預設utf-8,py2規定文件頭 print(r1) #{"name": "Owen", "age": 18, "height": 180, "gender": "男"} ''' dump:將對象序列化成字元串存儲到文件中 ''' with open('1.txt','w',encoding='utf-8')as w: json.dump(obj,w,ensure_ascii=False) ''' 反序列化:將字元串轉換為對象 ''' json_str ='{"name":"Owen","age":18,"height":180,"gender":"男"}' r2 = json.loads(json_str,encoding='utf-8') #預設跟當前文件解釋器執行編碼走 print(r2,type(r2)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'dict'> with open('1.txt','r',encoding='utf-8')as r: data = json.load(r) print(data,type(data)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'dict'>

 

四,pickle模塊:

obj = {"name":'Owen',"age":18,"height":180,"gender":""}
'''eval''' s = str(obj) print(s,type(s)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'str'> o = eval(s) print(o,type(o)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'dict'> ''' 為什麼有很多序列化和反序列化模塊 因為程式中會出現各種各樣的對象,如果要將這些對象持久化存儲,必須先序列化 只有序列化存儲後,必須有對應的反序列化,才能保證存儲的數據被重新讀取使用 什麼是序列化: 對象=》字元串 為什麼序列化:存(pickle) 和 傳(json) 為什麼要反序列:再次使用 為什麼有很多序列化模塊:存與取的演算法可以多種多樣,且要配套 ''' import pickle obj = {"name":'Owen',"age":18,"height":180,"gender":""} #序列化 r1 = pickle.dumps(obj) print(r1) #b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Owenq\x02X\x03\x00\.......94\xb7q\x06u.' with open('2.txt','wb')as w: pickle.dump(obj,w) #反序列化 with open('2.txt','rb')as r: data = r.read() o1 = pickle.loads(data) print(o1,type(o1)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'dict'> r.seek(0,0) #游標移到開頭在讀 o2 = pickle.load(r) print(o2,type(o2)) #{'name': 'Owen', 'age': 18, 'height': 180, 'gender': '男'} <class 'dict'>

 

五,shelve 模塊:

'''
即時存取的序列化模塊

 該模塊用於序列化python中的數據,但是序列化已經有pickle了為什麼出現了shevle?

 因為shevle更加簡單,封裝了文件的讀寫操作.load和dump操作,

 只有一個open函數,返回類似字典的對象,可讀可寫;key必須為字元串,而值可以是python所支持的數據類型

 完全可以將其看做是一個帶有持久存儲功能的字典來看待,操作方式與字典沒有任何區別

'''''

 #1,保存數據
 s = shelve.open("shv.shv")
 s["name"] = "jack"

 #2,取出數據
 s = shelve.open("shv.shv")
 print(s["name"])    #輸出 jack

 #3,關閉資源
 s.close()


import shelve shv_dic = shelve.open('my.shv') shv_dic['name'] = 'Owen' shv_dic['nmae'] = 'Zero' shv_dic.close() #關閉後需要重新open才能讀 # print(shv_dic['name']) shv_dic = shelve.open('my.shv') print(shv_dic['name']) #Owen stus = ['張三','李四'] shv_dic['stus'] = stus print(shv_dic['stus']) shv_dic.close() #['張三', '李四'] shv_dic = shelve.open('my.shv',writeback=True) #將內容從文件中取出,在記憶體中添加,如果操作文件有writeback=True,會將記憶體操作記錄實時同步到文件 shv_dic['stus'].append('王五') print(shv_dic['stus'])    #['張三','李四','王五'] shv_dic.close()     #方式二:利用一個緩存的變數 # ls = [] # she = shelve.open('my.shv') # stus = ['張三','李四'] # ls = stus # temp = ls # temp.append('王五') # ls = temp # print(ls) import shelve list = [1, 2, 3] she = shelve.open('test') she['d'] = list print(she['d']) temp = she['d'] temp.append('f') she['d'] = temp print(she['d'])

 

六,hashlib加密模塊:

''''
不可逆加密:沒有解密的加密方式 md5
解密方式:碰撞解密
加密的對象:用於傳輸的數據(字元串類型數據)
'''''

import hashlib
lock = hashlib.md5()

# 195eaff9c88bceae9f094f5ef322e5da
data = '你好帥'
lock.update(data.encode('utf-8'))

#195eaff9c88bceae9f094f5ef322e5da
lock.update(''.encode('utf-8'))
lock.update(''.encode('utf-8'))
lock.update(''.encode('utf-8'))

res = lock.hexdigest()
print(res)

'''
特點:加密的總數據一樣,加密結果一定一樣,且演算法不變,加密結果的長度不變
'''


'''
一次加密:
1,獲取加密對象  hashlib.md5() => lock_obj
2,添加加密數據 lock_obj.update(b'...')  ... lock_obj.update(b'...')
3,獲取加密結果 lock.hexdigest() => result 
'''
lock = hashlib.md5()
lock.update(b'')    #d41d8cd98f00b204e9800998ecf8427e
res = lock.hexdigest()
print(res)


'''
加鹽加密:
1,保證原數據過於簡單,通過複雜的鹽也可以提高解密難度
2,即使被碰撞解密成功,也不能直接識別鹽與有效數據
'''
lock_obj = hashlib.md5()
lock.update(b'goodgoods')
lock_obj.update(b'123')
lock_obj.update(b'upup')
res = lock_obj.hexdigest()
print(res)      #4e8beac37b1af87849fcbacbb534cbd3


#67b176705b46206614219f47a05aee7ae6a3edbe850bbbe214c536b989aea4d2
lock_obj = hashlib.sha3_256(b'1')
print(lock_obj.hexdigest())

#ca2c70bc13298c5109ee0cb342d014906e63652......
lock_obj = hashlib.sha3_512(b'1')
print(lock_obj.hexdigest())

 

 

七,hmac 加密模塊:

'''
hmac加密:
'''''
import hmac
#hmac.new(arg)      #區別:必須提供一個參數

cipher = hmac.new('加密的數據'.encode('utf-8')) print(cipher.hexdigest()) #786d0bc4850b2f4daf6b293a3df23653 cipher = hmac.new('前鹽'.encode('utf-8')) cipher.update('加密的數據'.encode('utf-8')) print(cipher.hexdigest()) #786d0bc4850b2f4daf6b293a3df23653 cipher = hmac.new('加密的數據'.encode('utf-8')) cipher.update('後鹽'.encode('utf-8')) print(cipher.hexdigest()) #e785c73fd63568fabf047ed5ec280a15 cipher = hmac.new('前鹽'.encode('utf-8')) cipher.update('加密的數據'.encode('utf-8')) cipher.update('後鹽'.encode('utf-8')) print(cipher.hexdigest()) #fdf226ffcf70e1ab56100bc88fa594a0

 

八,shutil 模塊:

'''
shutil : 可以操作許可權的處理文件模塊,該模塊提供了更加豐富的文件操作功能,壓縮,解壓縮,獲取文件信息等
'''''

  shutil.copyfileobj     拷貝文件 提供兩個文件對象 長度表示緩衝區大小
  shutil.copyfile(src, dst) 拷貝文件 提供兩個文件路徑
  shutil.copymode()      拷貝文件許可權 提供兩個文件路徑
  shutil.copystat(src, dst) 拷貝文件狀態信息 最後訪問 最後修改 許可權 提供兩個文件路徑
  shutil.copy(src, dst)    拷貝文件和許可權 提供兩個文件路徑
  shutil.copy2(src, dst)   拷貝文件和狀態信息 提供兩個文件路徑

  shutil.ignore_patterns("mp3","*.py")
  shutil.copytree(src, dst, symlinks=False, ignore=None) 拷貝目錄
  symlinks預設False將軟連接拷貝為硬鏈接 否則拷貝為軟連接

  shutil.rmtree        刪除目錄 可以設置忽略文件
  shutil.move(src, dst)   移動目錄和文件



import shutil ''' 1,基於路勁的文件複製: shutil.copyfile(文件1,文件2):文件1直接覆蓋copy給文件2 '''
shutil.copyfile(r'D:\Python_Project\ClassRoom\day19\1,random模塊.py',r'D:\Python_Project\ClassRoom\day19\part1\m1.py')
''' 2,基於流的文件複製: shutil.copyfileobj(文件1,文件2):將文件1的數據覆蓋copy給文件2 '''
with open('D:\Python_Project\ClassRoom\day18\\time模塊.py','rb')as r,open('D:\Python_Project\ClassRoom\day19\part1\m1.py','wb')as w: shutil.copyfileobj(r,w)
''' 3,遞歸刪除目標目錄 shutil.rmtree(目標目錄):可以遞歸刪除目錄下的目錄及文件。 '''
shutil.rmtree(r'D:\Python_Project\ClassRoom\part7')
''' 4,文件移動 shutil.move(源文件,指定路徑):遞歸移動一個文件。 '''
shutil.move(r'D:\Python_Project\ClassRoom\day19\1.txt',r'D:\Python_Project\ClassRoom\day19\part1') ''' 5,文件夾壓縮 file_name:被壓縮後形成的文件名 format:壓縮的格式,壓縮包種類,“zip”, “tar”, “bztar”,“gztar” archice_path:要被壓縮的文件夾路徑 shutil.make_archive('file_name','format','archice_path') ''' shutil.make_archive('D:\Python_Project\ClassRoom\day19\\1,random模塊.py','zip','D:\Python_Project\ClassRoom\day19\part1')
''' 6,文件夾解壓 unpack_file :被解壓文件 unpack_name :解壓後的名字 format :解壓格式 shutil.unpack_archive('unpack_file','unpack_name','format') '''

shutil.unpack_archive('D:\Python_Project\ClassRoom\day19\\1,random模塊.py.zip','D:\Python_Project\ClassRoom\day19\part1','zip')

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天的面試題以基礎為主,去面試Python工程師,這幾個基礎問題不能答錯 第1題:列表和元組有什麼不同? 列表和元組是Python中最常用的兩種數據結構,字典是第三種。 相同點: 都是序列 都可以存儲任何數據類型 可以通過索引訪問 語法差異 使用 創建列表,而 創建元組。 是否可變 列表是 ,而元組 ...
  • python視頻 神經網路 Tensorflow 模塊 視頻教程 (帶源碼) python視頻 神經網路 Tensorflow 模塊 視頻教程 (帶源碼) python視頻 神經網路 Tensorflow 模塊 視頻教程 (帶源碼) 所屬網站分類: 資源下載 > python視頻教程 作者:smil ...
  • 參考博文:https://www.cnblogs.com/weven/p/7252917.html 以下是我按照參考博文進行實際操作的過程,此篇只作記錄。 一、下載 1、打開官網https://www.python.org/downloads/windows/,點擊Python 2版本鏈接 2、點擊 ...
  • 前言 如果說收集演算法是記憶體回收的方法論,那麼垃圾收集器就是記憶體回收的具體實現。java虛擬機規範中對垃圾收集器應該如何實現並沒有任何規定,因此不同的廠商、不同的版本的虛擬機所提供的垃圾收集器都有可能會有很大的區別,並且一般都會提供參數供用戶根據自己的應用特點和要求組合出各個年代所使用的收集器。 相關 ...
  • 簡介 上一篇介紹了 Hystrix Dashboard 監控單體應用的例子,在生產環境中,監控的應用往往是一個集群,我們需要將每個實例的監控信息聚合起來分析,這就用到了 Turbine 工具。Turbine有一個重要的功能就是匯聚監控信息,並將匯聚到的監控信息提供給Hystrix Dashboard ...
  • 前言 本篇文章主要介紹的是SpringBoot整合Redis,使用Restful風格實現的CRUD功能。 Redis 介紹 Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key value資料庫。 Redis 與其他 key value緩存產品有以下三個特點: Redis支持數據的持久 ...
  • 本例中聲明瞭一個靜態變數num用於記錄程式中共產生了多少個對象。 因為對象創建時會自動調用構造方法,所以在構造方法中加入了“num++;”語句,這樣每創建一個對象就調用一次構造方法,從而每產生一個對象,num的值就會自動加1 。 此時,因為靜態變數是一個公共的存儲單元,所以類的任何一個對象去修改它時 ...
  • 今天早上到現在老師都沒有講新課,每天都寫博客,今天沒學到新的,也不知道學什麼,好煩啊,外邊還下雨,下一周了。 不知道什麼時候才能停,又想它停又想它繼續下,好糾結。 老師叫我們天天寫博客,叫我們要堅持,感覺班上好多人都沒寫了,感覺就我自己堅持寫,現在好了,今天老師 沒講新課 我只能寫日記了。 很快就要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...