欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 入門之 內置模塊 -- 序列化模塊(json模塊、pickle

系統 1939 0

Python 入門之 內置模塊 -- 序列化模塊(json模塊、pickle模塊)

1、序列化

Python中這種序列化模塊有三種:

? json模塊 :

? 不同語言都遵循的一種數據轉化格式,即不同語言都使用的特殊字符串。(比如Python的一個列表[1, 2, 3]利用json轉化成特殊的字符串,然后在編碼成bytes發送給php的開發者,php的開發者就可以解碼成特殊的字符串,然后在反解成原數組(列表): [1, 2, 3])

? json序列化只支持部分Python數據結構:dict,list, tuple,str,int, float,True,False,None

? pickle模塊:

? 只能是Python語言遵循的一種數據轉化格式,只能在python語言中使用。

? 支持Python所有的數據類型包括實例化對象。

? shelve模塊:類似于字典的操作方式去操作特殊的字符串。

序列化的本質就是將一種數據結構(如字典,列表)等轉換成一個特殊的序列(字符串或者bytes)的過程就叫做序列化。

(1)序列化模塊就是將一個常見的數據結構轉化成一個特殊的序列,并且這個特殊的序列還可以反解回去。

(2)主要用途:

<1> 文件讀寫數據

<2> 網絡傳輸數據

(3)json模塊

<1> json模塊是將滿足條件的數據結構轉化成特殊的字符串,并且也可以反序列化還原回去

<2> 能夠序列的數據類型:字典,列表,元組

? 4方法 2組

dumps loads ---- 用于網絡傳輸
dump load ---- 用于文件存儲

1> dumps、loads

[1] 將字典類型轉換成字符串類型
          
            import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:將一個字典轉換成一個字符串
print(type(str_dic),str_dic)  #
            
               {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json轉換完的字符串類型的字典中的字符串是由""表示的
            
          
        
[2] 將字符串類型的字典轉換成字典類型
          
            import json
dic2 = json.loads(str_dic)  #反序列化:將一個字符串格式的字典轉換成一個字典
#注意,要用json的loads功能處理的字符串類型的字典中的字符串必須由""表示
print(type(dic2),dic2)  #
            
               {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
            
          
        
[3] 還支持列表類型
          
            list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以處理嵌套的數據類型 
print(type(str_dic),str_dic) #
            
               [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #
              
                 [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
              
            
          
        

2> dump、load

[1] 將對象轉換成字符串寫入到文件當中
          
            import json
f = open('json_file.json','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一個文件句柄,直接將字典轉換成json字符串寫入文件
f.close()
# json文件也是文件,就是專門存儲json字符串的文件。
          
        
[2] 將文件中的字符串類型的字典轉換成字典
          
            import json
f = open('json_file.json')
dic2 = json.load(f)  #load方法接收一個文件句柄,直接將文件中的json字符串轉換成數據結構返回
f.close()
print(type(dic2),dic2)
          
        
其他參數說明

ensure_ascii :,當它為True的時候,所有非ASCII碼字符顯示為\uXXXX序列,只需在dump時將ensure_ascii設置為False即可,此時存入json的中文即可正常顯示。

separators :分隔符,實際上是(item_separator, dict_separator)的一個元組,默認的就是(,,:);這表示dictionary內keys之間用“,”隔開,而KEY和value之間用“:”隔開。

sort_keys :將數據根據keys的值進行排序。

json序列化存儲多個數據到同一個文件中

對于json序列化,存儲多個數據到一個文件中是有問題的,默認一個json文件只能存儲一個json數據,但是也可以解決,舉例說明:

          
            對于json 存儲多個數據到文件中
dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('序列化',encoding='utf-8',mode='a')
json.dump(dic1,f)
json.dump(dic2,f)
json.dump(dic3,f)
f.close()

f = open('序列化',encoding='utf-8')
ret = json.load(f)
ret1 = json.load(f)
ret2 = json.load(f)
print(ret)
          
        

上邊的代碼會報錯,解決方法:

          
            dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('序列化',encoding='utf-8',mode='a')
str1 = json.dumps(dic1)
f.write(str1+'\n')
str2 = json.dumps(dic2)
f.write(str2+'\n')
str3 = json.dumps(dic3)
f.write(str3+'\n')
f.close()

f = open('序列化',encoding='utf-8')
for line in f:
    print(json.loads(line))
          
        

(4)pickle模塊

<1> pickle模塊是將Python所有的數據結構以及對象等轉化成bytes類型,然后還可以反序列化還原回去

<2> 只有Python有,幾乎可以序列Python中所有數據類型,匿名函數不能序列

使用上與json幾乎差不多,也是兩對四個方法。

dumps loads ---- 用于網絡傳輸
dump load ---- 用于文件存儲

1> dumps、loads

          
            import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  # bytes類型

dic2 = pickle.loads(str_dic)
print(dic2)    #字典
# 還可以序列化對象
import pickle
def func():
    print(666)

ret = pickle.dumps(func)
print(ret,type(ret))  # b'\x80\x03c__main__\nfunc\nq\x00.' 
            
              
f1 = pickle.loads(ret)  # f1得到 func函數的內存地址
f1()  # 執行func函數
            
          
        

2> dump、load

          
            dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}
f = open('pick序列化',mode='wb')
pickle.dump(dic,f)
f.close()
with open('pick序列化',mode='wb') as f1:
    pickle.dump(dic,f1)

          
        

pickle序列化存儲多個數據到一個文件中

          
            dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}

f = open('pick多數據',mode='wb')
pickle.dump(dic1,f)
pickle.dump(dic2,f)
pickle.dump(dic3,f)
f.close()

f = open('pick多數據',mode='rb')
while True:
    try:
        print(pickle.load(f))
    except EOFError:
        break
f.close()

          
        

自寫一個pickle寫入文件上下文

          
            class MyPickle:
    def __init__(self,path,mode='load'):
        self.path = path
        self.mode = 'ab' if mode=='dump' else 'rb'

    def __enter__(self):
        self.f = open(self.path, mode=self.mode)
        return self

    def dump(self,content):
        pickle.dump(content,self.f)

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.f.close()

    def __iter__(self):
        while True:
            try:
                yield  pickle.load(self.f)
            except EOFError:
                break


class Course:
    def __init__(self,name,price,period):
        self.name = name
        self.price = price
        self.period = period
python = Course('python',19800,'6 months')
linux = Course('linux',19800,'6 months')


with MyPickle('course_file') as p:
    for obj in p:
        print(obj.__dict__)
with MyPickle('course_file','dump') as p:
    p.dump(python)
    p.dump(linux)

with open('course_file','ab') as f:
    pickle.dump(linux,f)

with open('course_file','rb') as f:
    while True:
        try:
            obj = pickle.load(f)
            print(obj.__dict__)
        except EOFError:
            break
          
        

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级黄色毛片播放 | 亚洲欧洲日本在线 | 日韩在线观看网站 | 久久99热精品 | 激情 婷婷 | 天天做天天爱天天大综合 | 在线视频综合视频免费观看 | 亚洲看片 | 精品一区二区三区免费 | 一区二区三区日韩精品 | 久久99精品热在线观看15 | jizz丝袜老师 | 精品国产一区二区三区久久 | 欧美日韩成人一区二区 | 喷水网站 | 毛片毛片毛片毛片毛片 | 国色天香综合网 | 国产乱码精品一区二区三区中文 | 色妇色综合久久夜夜 | 欧美欧美欧美 | 日本不卡视频在线播放 | 欧美高清网站 | 男女作爱免费网站 | 天天色天天射天天操 | 草草影院浮力 | 欧美久 | 欧美精品aaa久久久影院 | 91免费国产精品 | 久草网站 | 青青草91视频 | 日本国产网站 | 666sao| 久草经典视频 | 丁香六月婷婷激情 | 五月伊人婷婷 | 日本二本三本二区 | 奇米777四色影视在线看 | 日韩免费网站 | 99热这里只有精品8 免费看搡女人的视频 | 亚洲综合精品 | 日本福利在线观看 |