Python常用的序列化工具對比,看哪個性能最好

      網(wǎng)友投稿 1047 2025-03-31

      json、pickle、shelve是Python提供給我們的序列化工具,小編利用休息時間學習python教程為大家整理的對比Python里面常用的序列化工具(json\pickle\marshal)看哪個性能更強大一些呢?請看下面這篇文章的介紹。


      閑扯

      磁盤上的數(shù)據(jù),我們一般稱為?“文件”?,一般不同的文件都有各自的后綴名,比如 .txt .docx .xlsx .jpg .mp3 .avi 。這些不同類型的文件一般分為兩大類:

      文本文件: 用記事本打開看到的是英文、發(fā)文、中文等字符;

      二進制文件: 用記事本打開看到的可能就是一堆亂碼;

      平日里,大家接觸到的更多的是二進制文件,比如word文檔,圖片,視頻,音頻等。為了保存和讀取這些不同文件,各自都規(guī)定了各自的文件格式,這些格式是各自存儲的規(guī)范。同時為了讓保存的文件更小便于傳輸(比如,視頻通過網(wǎng)絡(luò)傳輸),各自還通過一些算法對文件數(shù)據(jù)進行壓縮,尤其是圖片、視頻和音頻都各自有很多壓縮算法,比如圖片的jpg,音頻的mp3,視頻的mkv這些即代表了相應的文件格式,還代表了其背后的壓縮算法。這些多媒體數(shù)據(jù)的壓縮算法的原則是,在保證媒體質(zhì)量的前提下盡量使得數(shù)據(jù)存儲量小。

      除了文件本身的一些壓縮算法,我們還經(jīng)常使用一些通用的壓縮軟件對文件進行打包和壓縮,比如zip,WinRAR等。

      Python序列化

      我們使用python時,經(jīng)常用到的數(shù)據(jù)就是int,float,string,list, dict,tuple這些內(nèi)置的數(shù)據(jù)類型和結(jié)構(gòu)。寫程序時,我們很可能希望把這些基本數(shù)據(jù)存儲到硬盤,即保存存儲結(jié)果。這個過程,我們稱之為“序列化”

      Python里面常用的序列化工具有:

      json

      pickle

      marshal

      cPickle是pickle的C語言實現(xiàn),速度更快,但Python3里面的pickle就是C語言實現(xiàn)的,因此不再包含cPickle模塊。

      json在web中使用更為廣泛,是各種web API的首選數(shù)據(jù)格式。

      以上三種工具,哪一個更快呢?

      #!/usr/bin/env?pythonimport?timeimport?jsonimport?pickleimport?marshaldef?test(data,?method): ????if?method?==?'json': ????????dumps?=?json.dumps ????????loads?=?json.loads ????elif?method?==?'pickle': ????????dumps?=?pickle.dumps ????????loads?=?pickle.loads ????elif?method?==?'marshal': ????????dumps?=?marshal.dumps ????????loads?=?marshal.loads ????b?=?time.time() ????s?=?'' ????loop?=?10000????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????for?i?in?range(loop): ????????s?=?dumps(data) ????print('{}?dumps?time?cost:?{}'.format(method,?time.time()?-?b))? ????b?=?time.time() ????for?i?in?range(loop): ????????loads(s) ????print('{}?loads?time?cost:?{}'.format(method,?time.time()?-?b))? def?main(): ????#?generate?test?data ????data?=?{} ????count?=?80 ????for?i?in?range(10000): ????????k?=?'%05d'?%?(i?%?count) ????????if?k?in?data: ????????????data[k].append(i?/?count) ????????else: ????????????data[k]?=?[i/count] ????print('data:',?len(data)) ????#?test ????test(data,?'json') ????test(data,?'pickle') ????test(data,?'marshal')if?__name__?==?'__main__': ????main()

      Python常用的序列化工具對比,看哪個性能最好

      以上代碼的測試過程是,對一個有80個key的字典進行序列化和反序列化操作,每個模塊各循環(huán)10000次,統(tǒng)計各自的耗時。用Python3.6跑出的結(jié)果如下:

      json?dumps?time?cost:?30.436348915100098 json?loads?time?cost:?10.900368928909302 pickle?dumps?time?cost:?1.7617356777191162 pickle?loads?time?cost:?2.8096134662628174 marshal?dumps?time?cost:?1.8232548236846924 marshal?loads?time?cost:?1.991441011428833

      由此看出,pickle的性能最好,json最慢。

      猿人學Python是一個不錯的學習網(wǎng)站,感興趣的可以關(guān)注公眾號或是網(wǎng)站

      python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel表格怎么制作二級目錄(excel怎么建立二級目錄)
      下一篇:excel制作折線圖教程 excel怎么將多個折線圖合并
      相關(guān)文章
      亚洲免费精彩视频在线观看| 亚洲情综合五月天| 久久精品亚洲综合一品| 亚洲精品午夜无码电影网| 亚洲色欲色欲www在线丝| 亚洲中文字幕无码一区| 爱情岛论坛网亚洲品质自拍| 亚洲人成网站观看在线播放| 亚洲国产精品自在拍在线播放| 亚洲AⅤ优女AV综合久久久| 看亚洲a级一级毛片| 亚洲国产综合人成综合网站| 亚洲 国产 图片| 亚洲国产精品一区二区三区久久| 亚洲一级片免费看| 亚洲精品人成无码中文毛片| 日韩亚洲精品福利| 亚洲成AV人在线观看网址| 亚洲黄片毛片在线观看| 亚洲国产激情一区二区三区| AV在线播放日韩亚洲欧| 国产AⅤ无码专区亚洲AV| 亚洲精品无码国产| 亚洲av成人无码久久精品 | 亚洲av福利无码无一区二区 | 亚洲AV无码片一区二区三区| 亚洲av乱码一区二区三区按摩| www国产亚洲精品久久久| 中文字幕亚洲综合久久男男| 亚洲级αV无码毛片久久精品| 久久综合九九亚洲一区| 亚洲色图古典武侠| 国产成人亚洲精品| 亚洲AV成人无码网站| 亚洲精品国产成人影院| 亚洲精品无码mv在线观看网站| 亚洲国产成人久久精品影视| 亚洲国产精品综合久久网各| 亚洲一区二区三区丝袜| 亚洲AV无码一区二区三区在线观看| 国产精品亚洲二区在线观看|