序列化模組 pickle
2.dump 和 load
3.對比dumps 和 dump
json
2.json 和 pickle 兩個模組區別
總結:hash
序列化:
反序列化:
php:
在檔案中儲存的資料,要麼是字串,要麼是位元組流
python中,所有的資料型別都可以通過dumps和loads進行序列化和反序列化
lst =[1
,2,3
]with
open
("ceshi2.txt"
,mode=
"a+"
,encoding=
"utf-8"
)as fp:
fp.write(lst)
lst =[1
,2,3
]res = pickle.dumps(lst)
print
(res)
def
func()
:print
("我是func函式")
res = pickle.dumps(func)
print
(res)
it =
iter
(range(10
))res = pickle.dumps(it)
res = pickle.loads(res)
print
(res,
type
(res)
)for i in
range(3
):res2 =
next
(res)
print
(res2)
dic =
with
open
("ceshi3.txt"
,mode=
"wb"
)as fp:
# dump(要轉換的資料,檔案物件)
pickle.dump(dic,fp)
with
open
("ceshi3.txt"
,mode=
"rb"
)as fp:
res = pickle.load(fp)
print
(res ,
type
(res)
)
dic =
str_bytes = pickle.dumps(dic)
print
(str_bytes)
with
open
("ceshi4.txt"
,mode=
"wb"
)as fp:
fp.write(str_bytes)
# 通過loads來取出
with
open
("ceshi4.txt"
,mode=
"rb"
)as fp:
str_bytes = fp.read(
) dic = pickle.loads(str_bytes)
print
(dic,
type
(dic)
)
引入模組:import json
dic =
# ensure_ascii=false 不通過ascii來顯示內容 sort_keys=true 對字典的鍵來進行排序
res =json.dumps(dic,ensure_ascii=
false
, sort_keys=
true
)print
(res ,
type
(res)
)# loads反序列化成原來的資料型別
dic = json.loads(res)
print
(dic ,
type
(dic)
)
dic =
with
open
("ceshi5.json"
,mode=
"w",encoding=
"utf-8"
)as fp:
# dump(要轉換的資料,檔案物件)
json.dump(dic,fp,ensure_ascii=
false
)# load反序列化成原來的資料型別
with
open
("ceshi5.json"
,mode=
"r",encoding=
"utf-8"
)as fp:
dic = json.load(fp)
print
(dic,
type
(dic)
)
json 可以連續dump , 不可以連續load (load是一次性拿出所有資料進行反序列化,容易出錯)
可以使用loads來解決
dic1 =
dic2 =
with
open
("ceshi6.json"
,mode=
"w",encoding=
"utf-8"
)as fp:
json.dump(dic1,fp)
fp.write(
"\n"
) json.dump(dic2,fp)
fp.write(
"\n"
)
with
open
("ceshi6.json"
,mode=
"r",encoding=
"utf-8"
)as fp:
dic = json.load(fp)
print
(dic)
解決方式,使用loads,一行一行進行反序列化
with
open
("ceshi6.json"
,mode=
"r",encoding=
"utf-8"
)as fp:
#檔案物件是迭代器,一次迭代一行
for i in fp:
dic = json.loads(i)
print
(dic)
import pickle
"""pickle 可以連續dump , 可以連續load
"""dic1 =
dic2 =
with
open
("ceshi7.pkl"
,mode=
"wb"
)as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)
with
open
("ceshi7.pkl"
,mode=
"rb"
)as fp:
dic = pickle.load(fp)
print
(dic)
dic = pickle.load(fp)
print
(dic)
"""try .. except .. 抑制報錯 如果try**塊裡面有問題,就執行except中的**"""
"""try:
把有問題的**放進來
except:
如果出現異常執行這個分支的**塊.
"""try
:with
open
("ceshi7.pkl"
,mode=
"rb"
)as fp:
while
true
: dic = pickle.load(fp)
print
(dic)
except
:pass
json 和 pickle 兩個模組的區別:
hash值具備以下三個特點:
1、如果傳入的內容一樣,並且採用hash演算法也一樣,那麼得到個hash值一定是一樣的
2、hash值的長度取決於採用的演算法,與傳入的文字內容的大小無關
3、hash值不可逆
import
hash
# 加密
code =
hash
.md5(
'egon燒餅哈哈哈'
.encode(
'utf-8'
)code.update(
',燒中之燒'
.encode(
'utf-8'
)# 往後新增
# 獲取加密資料
res = code.hexdigest(
)
Java學習之路 day20
1 靜態 塊 static靜態 塊,當第一次用到本類時,靜態 塊執行唯一的一次 靜態內容總是優先於非靜態的 先有類在有物件 所以靜態 塊比構造方法先執行 靜態 塊的典型用途 用來一次性的對靜態成員進行賦值 2 靜態是不能直接訪問非靜態的,如果想訪問必須要先建立物件,讓物件去呼叫非靜態 靜態變數不可設...
Day20 高階函式
今天主要學習了python中sorted,filter,map 三個高階函式,還了解了一下函式的柯里化 1.什麼是高階函式def way1 x return x 3 def way2 x return x x result way2 way1 7 print result 1002.標準庫中的高階函...
暑期訓練 day20
暑期訓練 day20 趙景樂今天看完了第二章的內容,有點多,現在想想記得的沒多少,還需要鞏固鞏固,找個時間再把相應的 打一打。今天訓練賽的a題錯了兩次,沒想到暴力能過,還是一開始打的麻煩了,c題是數學題,因為一開始沒優化到底,結果超時了,剪枝 改良公式也算剪枝吧,畢竟少了一重迴圈 後就過了,b題一開...