日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python3內(nèi)置模塊之Pickle和cPickle數(shù)據(jù)持久化方法小結(jié)

系統(tǒng) 1664 0

概述

模塊 Pickle 實現(xiàn)了對一個 Python 對象結(jié)構(gòu)的二進制的序列化和反序列化。? 即當(dāng)Python程序持續(xù)運行一些字符串、列表字典、甚至自定義的類等數(shù)據(jù)對象,需要持久化存儲,即存儲在磁盤中,防止運行在內(nèi)存中,因斷電等情況丟失數(shù)據(jù)。那么Pickle模塊就派上用場了,它可以將對象轉(zhuǎn)換為一種可以傳輸或存儲的格式。python的pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列和反序列化。通過pickle模塊的序列化操作我們能夠?qū)⒊绦蛑羞\行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創(chuàng)建上一次程序保存的對象。

與JSON模塊的比較

可以看到pickle模塊和看似相似,但其還是有著本質(zhì)的不同,即:

  • JSON 是一個文本序列化格式(它輸出 unicode 文本,盡管在大多數(shù)時候它會接著以? utf-8 ?編碼),而 pickle 是一個二進制序列化格式;

  • JSON是字面量可讀的,而pickle不是(可以類比base64的不可讀性);

  • JSON是可互操作的,在Python系統(tǒng)之外廣泛使用,而pickle則是Python專用的;

序列化與反序列化

通過二進制的方式讀寫目標(biāo)存儲文件,并利用 dump 序列化數(shù)據(jù)對象, load 反序列化數(shù)據(jù)對象

            
              D 
              
                =
              
              
                {
              
              
                'name'
              
              
                :
              
              
                'bob'
              
              
                ,
              
              
                'major'
              
              
                :
              
              
                {
              
              
                'english'
              
              
                ,
              
              
                'math'
              
              
                }
              
              
                ,
              
              
                'd'
              
              
                :
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ,
              
              
                4
              
              
                ,
              
              
                5
              
              
                ,
              
              
                6
              
              
                ,
              
              
                7
              
              
                ]
              
              
                }
              
              
                with
              
              
                open
              
              
                (
              
              
                'D.pik'
              
              
                ,
              
              
                'wb'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    pickle
              
                .
              
              dump
              
                (
              
              D
              
                ,
              
               f
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                'D.pik'
              
              
                ,
              
              
                'rb'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    D 
              
                =
              
               pickle
              
                .
              
              load
              
                (
              
              f
              
                )
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              D
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              D
              
                )
              
            
          

示例結(jié)果:

            
              
                
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}

              
            
          

當(dāng)然我們也可以序列化到內(nèi)存(字符串格式保存),然后對象可以以任何方式處理如通過網(wǎng)絡(luò)傳輸

            
              
pik 
              
                =
              
               pickle
              
                .
              
              dumps
              
                (
              
              D
              
                )
              
              
                print
              
              
                (
              
              pik
              
                )
              
              

D 
              
                =
              
               pickle
              
                .
              
              loads
              
                (
              
              pik
              
                )
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              D
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              D
              
                )
              
            
          

示例結(jié)果:

            
              b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x05\x00\x00\x00majorq\x03cbuiltins\nset\nq\x04]q\x05(X\x07\x00\x00\x00englishq\x06X\x04\x00\x00\x00mathq\x07e\x85q\x08Rq\tX\x01\x00\x00\x00dq\n]q\x0b(K\x01K\x02K\x03K\x04K\x05K\x06K\x07eu.'

              
                
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}

              
            
          

cPickle

cPickle包的功能和用法與pickle包幾乎完全相同 (其存在差別的地方實際上很少用到),不同在于cPickle是基于c語言編寫的,具有更好的性能,對于大多數(shù)應(yīng)用程序,推薦使用該模塊。對于上面的例子,如果想使用cPickle包,我們都可以將import語句改為 import cPickle as pickle 進行使用。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 三台县| 新昌县| 江西省| 思南县| 长子县| 克东县| 诏安县| 汶上县| 抚远县| 乌拉特中旗| 峨边| 岐山县| 上犹县| 沧州市| 托克逊县| 和田市| 大安市| 昭通市| 呼伦贝尔市| 新余市| 绥阳县| 林西县| 深圳市| 简阳市| 永济市| 奉贤区| 寿光市| 化州市| 遵义市| 于都县| 阳曲县| 两当县| 托克逊县| 新宁县| 新乡市| 巴彦县| 永平县| 茶陵县| 巴林左旗| 黄大仙区| 阳西县|