序列化模組,隨機數模組,os模組,sys模組,hashlib模組

想吃橙子發表於2019-03-19

模組

json模組

用於多種語言互動  程式語言中的通用資料

內建的模組 不需要安裝,直接匯入使用

import json  匯入一個json模組

dic = {'1':2}

s = json.jumps(dic)          將字典物件轉換成字串

print(types)

d = json.loads(s)              將字串轉換成字典

print(d)

print(type(d))

json.dump({'1':4,open('a','w',encoding='utf-8'))     寫入檔案

d = json.load(open('a','r',encoding='utf-8'))           讀檔案

d['1'] = 10                                                               修改檔案

json.dump(d,open('a','w',encoding='utf-8'))          把字典d寫入到檔案a裡

d = json.load(open('a','r',encoding='utf-8'))           讀檔案

print(d)

 

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:將一個字典轉換成一個字串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json轉換完的字串型別的字典中的字串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:將一個字串格式的字典轉換成一個字典
#注意,要用json的loads功能處理的字串型別的字典中的字串必須由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以處理巢狀的資料型別 
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]

loads和dumps

dumps loads

 

import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一個檔案控制程式碼,直接將字典轉換成json字串寫入檔案
f.close()

f = open('json_file')
dic2 = json.load(f)  #load方法接收一個檔案控制程式碼,直接將檔案中的json字串轉換成資料結構返回
f.close()
print(type(dic2),dic2)

dump load

 

 

 1 import json
 2 
 3 ATM
 4 
 5 d = json.load(open('a','r',encoding='utf-8'))
 6 print(d)
 7 
 8 d['money'] += 500
 9 
10 print(d)
11 
12 d['money'] -= 100
13 
14 import json
15 d = json.load(open('a','r',encoding='utf-8'))
16 print(d)

 

json總結

json.loda()                                引數:檔案控制程式碼(r) 作用:將檔案中字串轉換為字典

json.dump()                                   物件(字典)  引數:檔案控制程式碼(w)  將字典轉換成字串寫入到檔案

json.dumps()                                 物件(字典)    將字典轉為字串

json.loads()                                   字串(字典)  將字串轉換成字典  

真正的json模組

import json

data = {'username':['李華','二愣子'],'sex':'male','age':16}

json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)           (字典名,字典鍵值對排序,縮排,分隔符(和預設一樣),元素內有中文就要有這個)

print(json_dic2)

pickle

只支援python  功能和json類似

import pickle

print(pickle.dumps({'1':4}))                                將物件轉換成類似二進位制的東西

print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))            將一堆類似二進位制的東西轉換為字典

pickle.dump({'2':4},open('b','wb'))

d = pickle.load(open('b','rb'))

print(d)

 

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二進位制內容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

pickle

 

 

 

總結:

josn,pickle 對比
loads json裡的將字串轉換成字典 pickle 將位元組轉換成字典
dumps json裡的將字典轉換成字串 pickle 將字典轉換成位元組
load json裡的將檔案中的字串轉換成字典 pickle 將檔案中的位元組轉換成字典
dump json裡的將字典轉換字串寫入到檔案中,pickle 將字典轉換成位元組寫入到檔案中


shelve
shelve也是python提供給我們的序列化工具,比pickle用起來更簡單一些。
shelve只提供給我們一個open方法,是用key來訪問的,使用起來和字典類似。
import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接對檔案控制程式碼操作,就可以存入資料
f.close()

import shelve
f1 = shelve.open('shelve_file')
existing = f1['key']  #取出資料的時候也只需要直接用key獲取即可,但是如果key不存在會報錯
f1.close()
print(existing)

這個模組有個限制,它不支援多個應用同一時間往同一個DB進行寫操作。所以當我們知道我們的應用如果只進行讀操作,我們可以讓shelve通過只讀方式開啟DB

import shelve
f = shelve.open('shelve_file', flag='r')
existing = f['key']
f.close()
print(existing)

由於shelve在預設情況下是不會記錄待持久化物件的任何修改的,所以我們在shelve.open()時候需要修改預設引數,否則物件的修改不會儲存。

import shelve
f1 = shelve.open('shelve_file')
print(f1['key'])
f1['key']['new_value'] = 'this was not here before'
f1.close()

f2 = shelve.open('shelve_file', writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
f2.close()

設定writeback

writeback方式有優點也有缺點。優點是減少了我們出錯的概率,並且讓物件的持久化對使用者更加的透明瞭;但這種方式並不是所有的情況下都需要,首先,使用writeback以後,shelf在open()的時候會增加額外的記憶體消耗,並且當DB在close()的時候會將快取中的每一個物件都寫入到DB,這也會帶來額外的等待時間。因為shelve沒有辦法知道快取中哪些物件修改了,哪些物件沒有修改,因此所有的物件都會被寫入


random
隨機數
import random
import random  # 內建的
print(random.random())
0-1 之間隨機小數

print(random.randint(1,10))
起始位置,終止位置 兩頭都包含

print(random.randrange(1,21,2))
起始位置,終止位置(不包含),步長

print(random.choice(['alex','wusir','eva_j']))
從有序資料結構中隨機選擇一個

print(random.choices(['wusir','tialaing','taihei','ritian'],k=2))
隨機選擇兩個,但是有重複

print(random.sample(['wusir','tialaing','taihei','ritian'],k=2))
隨機選擇兩個,沒有重複

li = [1,2,3,4,6]
random.shuffle(li) # 洗牌 打亂順序
print(li)

隨機數 驗證碼 微信紅包

print(chr(65),chr(90),chr(97),chr(122))

U = chr(random.randrange(65,91))
L = chr(random.randrange(97,123))
n1 = random.randrange(0,10)
n2 = random.randrange(0,10)
print(U, L,n1,n2)
os模組

#當前執行這個python檔案的工作目錄相關的工作路徑
os.getcwd() 獲取當前工作目錄,即當前python指令碼工作的目錄路徑
os.chdir("dirname") 改變當前指令碼工作目錄;相當於shell下cd
os.curdir 返回當前目錄: ('.')
os.pardir 獲取當前目錄的父目錄字串名:('..')


#和資料夾相關
os.makedirs('dirname1/dirname2') 可生成多層遞迴目錄
os.removedirs('dirname1') 若目錄為空,則刪除,並遞迴到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname') 生成單級目錄;相當於shell中mkdir dirname
os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印


# 和檔案相關
os.remove() 刪除一個檔案
os.rename("oldname","newname") 重新命名檔案/目錄
os.stat('path/filename') 獲取檔案/目錄資訊

# 和執行系統命令相關

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

os.popen("bash command).read() 執行shell命令,獲取執行結果

os.environ 獲取系統環境變數


#path系列,和路徑相關
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.join('C:\\','app','a','b')   --->  C:app\a\b
os.path.getatime(path) 返回path所指向的檔案或者目錄的最後訪問時間
os.path.getmtime(path) 返回path所指向的檔案或者目錄的最後修改時間
os.path.getsize(path) 返回path的大小

 

sys模組
python直譯器互動的 內建的

import sys

print(sys.argv[-1]) ***
接受cmd方式呼叫 後邊的引數會傳遞進來
linux系統上 -- 後端開發 -- 資料庫(檔案) ip + 埠

print(sys.path) # 新增自定義模組路勁的 # ******

print(sys.version) # 版本 獲取解釋的版本號

sys.platform = 'win1988'

print(sys.platform) #獲取當前作業系統的平臺位數 # 不是定死的

print(sys.exit(1))

hashlib 

加密演算法

作用: 當做密碼
判斷一致性
加密後不可逆 不能解 (一年前暴力破解 -- 撞庫)
(現在md5 反推)

sha1,sha256,sha512

alex3714
**********

import hashlib
md5 = hashlib.md5('鹽'.encode('utf-8')) # 選擇加密方式 加鹽
md5.update('alex3714'.encode('utf-8')) # 將明文轉成位元組然後進行加密
print(md5.hexdigest()) # 生成密文

md5 = hashlib.md5() # 選擇加密方式 加鹽
md5.update('alex3714'.encode('utf-8')) # 將明文轉成位元組然後進行加密
print(md5.hexdigest()) # 生成密文

sha512 = hashlib.sha512()
sha512.update('alex3714'.encode('utf-8'))
print(sha512.hexdigest())


sha512
優點: 安全    缺點:速度慢

md5
優點:安全,快 缺點:易被破解


user,pwd = input('user|pwd:').strip().split('|')
import hashlib

md5 = hashlib.md5(str(user).encode('utf-8'))
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())

md5,sha1,sha256,sha512

重要內容
1.序列化
json # 必會

dump 把字典轉成字串存入檔案
load 將檔案的字串轉成字典
dumps 將字典轉成字串
loads 將字串轉成字典

pickle # 瞭解
shevle # 瞭解

2. 隨機數
random.random() 0-1 之間的小數
驗證碼
random.randint(1,10)

3. os 作業系統

路徑部分
os.path.join
os.path.abspath
os.path.basename
os.path.dirname
os.path.getsize() # 獲取大小
os.remove()
os.rename()
os.listdir()
os.chdir() # 切換目錄
os.makedirs('app/a/b') 遞迴建立資料夾
os.removedirs('app/a/b') 遞迴刪除
os.mkdir() 建立單個資料夾
os.rmdir() 刪除單個資料夾

sys python直譯器

sys.argv() 在cmd中執行 可以將檔案 後的內容傳遞到檔案中使用
sys.path python直譯器載入的路徑,自定義模組新增到這裡
sys.exit()
sys.version() 獲取直譯器的版本號
sys.platform 獲取當前平臺的位數


hashlib 加密演算法
md5,sha1,sha256,sha512
1.先匯入模組
2.建立一個加密方式
3.將要加密的內容編碼成位元組後加密
4.生成密文

import hashlib
md5 = hashlib.md5(b'alex')
md5.update('alex3714'.encode('utf-8'))
print(md5.hexdigest())

相關文章