Python內(nèi)存數(shù)據(jù)序列化到硬盤上哪家強(qiáng)

      網(wǎng)友投稿 927 2022-05-28

      1. 閑扯一下:文件

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

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

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

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

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

      2. 回到原題:Python序列化

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

      Python內(nèi)存數(shù)據(jù)序列化到硬盤上哪家強(qiáng)

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

      json

      pickle

      marshal

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

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

      以上三種工具,哪一個(gè)更快呢?

      #!/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()

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

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

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

      版權(quán)申明:若沒有特殊說明,文章皆是猿人學(xué)原創(chuàng),沒有猿人學(xué)授權(quán),請(qǐng)勿以任何形式轉(zhuǎn)載。

      Python 存儲(chǔ)

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

      上一篇:Kafka使用最佳實(shí)踐-Kafka生產(chǎn)問題分析思路與解決方案
      下一篇:實(shí)訓(xùn)一授課筆記-使用fdisk管理分區(qū)
      相關(guān)文章
      国产亚洲一区二区三区在线观看| 久久精品国产亚洲αv忘忧草| 亚洲人成人无码网www电影首页| 亚洲成a人片在线观看中文动漫| 亚洲视频中文字幕在线| 亚洲av无码专区在线观看下载| 亚洲日本va中文字幕久久| 亚洲中文字幕伊人久久无码| 亚洲人成在线免费观看| 日韩亚洲一区二区三区| 亚洲精品乱码久久久久久久久久久久 | 亚洲人成www在线播放| 亚洲最大激情中文字幕| 亚洲av无码一区二区三区四区| 亚洲精品理论电影在线观看| 精品亚洲成AV人在线观看| 亚洲永久永久永久永久永久精品| 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲性久久久影院| 中国亚洲女人69内射少妇| 亚洲欧洲自拍拍偷午夜色无码| 国产亚洲欧洲精品| 亚洲网址在线观看你懂的| 亚洲熟妇无码久久精品| 人人狠狠综合久久亚洲88| 亚洲αv久久久噜噜噜噜噜| 国产亚洲av片在线观看18女人| WWW亚洲色大成网络.COM | 亚洲精品国产高清嫩草影院| 亚洲欧洲专线一区| 亚洲AV无码专区在线亚| 亚洲午夜无码毛片av久久京东热| 亚洲一级毛片免观看| 亚洲午夜福利在线视频| 国产综合激情在线亚洲第一页| 亚洲日韩精品国产一区二区三区 | 亚洲AV日韩综合一区| 亚洲午夜精品久久久久久浪潮| 亚洲成AV人片在线观看ww| 久久亚洲AV无码精品色午夜| 亚洲18在线天美|