python之序列化和壓縮

來源:互聯網
上載者:User

什麼時候使用序列化?

比如,我有一個很複雜的資料結構(類似字典,key和value是python的基本對象),我想把它存在資料庫中。你準備怎麼做,一項項拆分然後分別儲存嗎?答案,no。

現在可以用序列化來做,把這個資料結構直接轉化成位元組串,存在資料庫中。恢複時,直接取出這個位元組串,恢複字串即可。

常用的是marshal和cPickle模組。

他們都是使用dump,dumps,load和loads方法。有專業測試說,marshal的速度要比cPickle快,但是也不盡然,cPickle是C寫的,也超快,而且如果存在較長的字串時,cPickle反而更快。

同時,cPickle可以與gzip一同使用,轉換後壓縮到最短的位元組串,節省空間的,進行儲存。

 

import cPickle,gzip
def save(filename,*objects):
    fil = gzip.open(filename,'wb')
    for obj in objects:
        cPickle.dump(obj,fil,proto=2)
    fil.close()
def load(filename):
    fil = gzip.open(filename,'rb')
    while True:
        try:
            yeild cPickle.load(fil)
        except EOFError:break
    fil.close()

比如處理45000個字串的列表,cPickle在dump時使用協議0後,產生的磁碟檔案大小為972KB,協議2則只需716KB。如果同時使用了gzip和協議2,產生的檔案為268KB,但是協議0的壓縮實際上是最好的,經測試,協議0和gzip產生的檔案為252KB。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.