環境小碩的轉行之路 21 序列化

2022-05-17 03:30:59 字數 4433 閱讀 8618

序列:列表 元組 字串 bytes.

序列化裡面的序列特指的就是字串和bytes.

把其它的資料型別轉換成字串和bytes的過程就是序列化的過程.

直接序列化的乙個例子:

dic =   

print([str(dic),dic])#序列化

主要內容

import json

'''為什麼要把其它資料型別轉換成字串?

轉字串的過程不就是資料型別的強制轉換嗎?為啥要學json和pickle模組呢?

網路上只能傳輸的是bytes型別.

儲存在檔案裡只是bytes和str(本質是bytes)

最好的傳輸模式:字典->字串->通過網路傳輸->字典->字串

eval要謹慎使用:不可以用在:a.使用者輸入的b.網路上接收的資料c.檔案中的內容

正常人不會用eval作序列化,但已知的**但需要y一些拼接,根據自己的邏輯去做拼接.

所以要有序列化模組

''' dic =

import json

ret = json.dumps(dic)#序列化

print(dic,type(dic))# # print(ret,type(ret))# res = json.loads(ret)

print(res,type(res))#可以直接使用,反序列化

# json.loads()

#問題1

dic1 =

ret1 = json.dumps(dic1)

print(1,json.loads(ret1),type(json.loads(ret1)))#將1和2也變成了字串

#問題2

dic2 =

ret2 = json.dumps(dic2)

print(2,json.loads(ret2),type(json.loads(ret2)))#(4,5,6)變成了[4,5,6]

#問題3

# set3 =

# json.dumps(set3)# is not json serializable

#問題4 #keys must be a string

# json.dumps()#keys must be a string

#json能夠處理的資料型別是非常有限的,只支援字串,列表,字典,數字.json序列化的資料在各種資料中都可以反序列化.因為要和別的語言通訊.

# 字典中的key只能是字串

# 別的語言的例子->前端語言:在網頁上做展示的 但本質上都是資料傳輸

#向檔案當中記錄字典,再從檔案中讀取字典ok.

#問題5

retp = json.dumps(dic)

with open('dic.dump','a',encoding='utf-8') as f:#一般是a而不是a+

# f.write(retp)#可以用json(dic,f)替換

with open('dic.dump','r',encoding='utf-8') as fr:

retr = fr.read()#這裡自己新增的話,必須用雙引號去表示字串,#可以用 dic = json.load(fr)替換

# dict = json.loads(retr)

# print(dic.keys())

#dump load 直接操作檔案,dumps和loads直接操作記憶體(針對資料)

#可以多次將資料dump進檔案,而不能多次load資料(只能load乙個變數),計算機不識別.

#不支援連續的存和取的,這時候只能用dumps和loads來實現這功能

# with open('dic.dump','r') as five_file:

# dic_5 = json.load(five_file)

# dic_5 = json.load(five_file)#報錯

#想要把乙個個的字典放到檔案中再乙個個拿出來怎麼辦?

#解決方法,+分隔符再一行一行的讀取資料,(用dumps和loads來執行)

with open('dic.dump','a') as fa:

dic_dump_write = json.dumps(dic2)

fa.write(dic_dump_write+'\n')

fa.write(dic_dump_write+'\n')

with open('dic.dump', 'r') as fr1:

for line in fr1:

json.loads(line)

json.loads(line)

小結

'''

json

dumps loads->針對資料

在記憶體中做資料轉換:

dumps 資料型別轉換成字串 序列化

loads 字串轉成資料型別 反序列化

dump load->針對檔案

直接將資料型別寫入檔案 從檔案中讀出資料列席

json 是所有語言都通用的一種序列化格式

只支援列表,字典,字串,數字

字典的key必須是str

'''

補充

dic_test = 

print(json.dumps(dic_test,ensure_ascii=false))#不然'無敵'是編碼形式顯示

import json

data =

#格式化序列化

json_dic2 = json.dumps(data,sort_keys=true,indent=2,separators=(',',':'),ensure_ascii=false)#indent縮排數 seperator('換行分割符','key和value分割符'),sort_keys:根據key去排序

print(json_dic2)

'''結果:

'''#一般情況下要存檔案,從網路上傳,都不關心這些格式了.若是格式化容易增加空間開銷.

主要內容

import pickle

#支援在python中幾乎所有的資料型別

dic = ,1:'abc'}#json模組無法處理

dic1 = ,2:'abc'}#json模組無法處理

dic2 = ,3:'abc'}#json模組無法處理

ret = pickle.dumps(dic)

print(ret)#bytes型別

#1.pickle dumps的結果永遠是位元組,看不見結果,且無法解碼.

print(pickle.loads(ret))

#2.只有pickle.loads可以認識這些位元組

#3.只能在python中使用

#4.在和檔案操作的時候,要用wb,rb的模式開啟檔案.

#dump load

# with open('pickle_file','wb') as pickle_open:

# pickle.dump(dic,pickle_open)

# pickle.dump(dic1,pickle_open)

# pickle.dump(dic2,pickle_open)

# with open('pickle_file','rb') as pickle_open:

# ret1 = pickle.load(pickle_open)

# print(ret1,type(ret1))#} # ret1 = pickle.load(pickle_open)

# print(ret1,type(ret1))#} #可以多次load,對應上次dump的次數.若是load次數超過dump次數則報錯.

#報錯的解決方法

with open('pickle_file','rb') as pickle_open:

while 1 :

try:

ret1 = pickle.load(pickle_open)

print(ret1,type(ret1))

except eoferror:

break

'''

os 和作業系統互動

資料夾和檔案的處理 :建立資料夾 刪除資料夾 重新命名檔案 刪除檔案 listdir stat

路徑的處理 : 路徑的拼接/拆分 計算大小 判斷目錄是否存在/是檔案/是資料夾 絕對路徑相關

執行作業系統命令 : 和執行路徑相關 執行命令的

序列化模組 json/pickle

dump/load 檔案中 <-> 其他資料型別 檔案中 <-> 字串/位元組 <-> 其他資料型別

dumps/loads 字串/位元組 <-> 其他資料型別

json 通用的/支援的資料型別少

pickle python專用的/支援幾乎所有資料型別

'''

環境小碩的轉行之路 15 小作業 閉包 迭代器

前言1.傳入多個數字,求和。2.判斷兩個數字較小的乙個。3.函式 輸入1個可迭代物件,將裡面的元素以 相連拼接成字串。4.寫函式,傳入n個值,返回字典。5.寫函式,輸入n,返回n的階乘。6.寫函式返回乙個撲克牌列表,每一項都是乙個元組,需要用到笛卡爾積。7.列印9 9乘法表。這個曾經自己在小學的時候...

環境小碩的轉行之路 24 大作業 編寫電腦程式

法一 老師的標準答案 import re def atom cal exp 原子性計算 if in exp a,b exp.split return str float a float b 計算乘法 elif in exp a,b exp.split 計算除法 return str float a ...

小碩之路 01

趁導師出差的這段時間,終於有時間來做一些自己的事。從之前的專案中發現了許多自己欠缺的模組。作為乙個專科直接讀研的人,並且還是學的機械相關專業的。對於現在所從事的數位化方向,有很多需要學習的地方。做乙個記錄吧 記錄一下三年的生活,希望自己能堅持 之前的部落格也做的不是很到位。如果發現文章中的問題 希望...