成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python基礎(chǔ)之(十一)數(shù)據(jù)存儲(chǔ)

Songlcy / 2304人閱讀

摘要:默認(rèn)為或者說,是以格式保存對(duì)象如果設(shè)置為或者,則以壓縮的二進(jìn)制格式保存對(duì)象。但是,要小心坑試圖增加一個(gè)坑就在這里當(dāng)試圖修改一個(gè)已有鍵的值時(shí)沒有報(bào)錯(cuò),但是并沒有修改成功。要填平這個(gè)坑,需要這樣做多一個(gè)參數(shù)沒有坑了還用循環(huán)一下

pickle

pickle是標(biāo)準(zhǔn)庫中的一個(gè)模塊,在Python 2中還有一個(gè)cpickle,兩者的區(qū)別就是后者更快。所以,下面操作中,不管是用import pickle,還是用import cpickle as pickle,在功能上都是一樣的。

而在Python 3中,你只需要import pickle即可,因?yàn)樗呀?jīng)在Python 3中具備了Python 2中的cpickle同樣的性能。

pickle.dump(obj,file[,protocol])

obj:序列化對(duì)象,在上面的例子中是一個(gè)列表,它是基本類型,也可以序列化自己定義的對(duì)象。

file:要寫入的文件。可以更廣泛地可以理解為為擁有write()方法的對(duì)象,并且能接受字符串為為參數(shù),所以,它還可以是一個(gè)StringIO對(duì)象,或者其它自定義滿足條件的對(duì)象。

protocol:可選項(xiàng)。默認(rèn)為False(或者說0),是以ASCII格式保存對(duì)象;如果設(shè)置為1或者True,則以壓縮的二進(jìn)制格式保存對(duì)象。

序列化對(duì)象
    >>> import pickle
    >>> d = {}
    >>> integers = range(9999)
    >>> d["i"] = integers        #下面將這個(gè)字典類型的對(duì)象存入文件
    
    >>> f = open("22902.dat", "wb")
    >>> pickle.dump(d, f)           #文件中以ascii格式保存數(shù)據(jù)
    >>> f.close()

    >>> f = open("22903.dat", "wb")
    >>> pickle.dump(d, f, True)     #文件中以二進(jìn)制格式保存數(shù)據(jù),文件較小,推薦方式
    >>> f.close()

    >>> import os
    >>> s1 = os.stat("22902.dat").st_size    #得到兩個(gè)文件的大小
    >>> s2 = os.stat("22903.dat").st_size
    
    >>> print "%d, %d, %.2f%%" % (s1, s2, (s2+0.0)/s1*100)    #Python 3: print("{0:d}, {1:d}, {2:.2f}".format (s1, s2, (s2+0.0)/s1*100))
    68903, 29774, 43.21%
反序列化對(duì)象
將數(shù)據(jù)保存入文件,還有另外一個(gè)目標(biāo),就是要讀出來,也稱之為反序列化。

    >>> integers = pickle.load(open("22901.dat", "rb"))
    >>> print integers    #Python 3: print(integers)
    [1, 2, 3, 4, 5]

再看看以二進(jìn)制存入的那個(gè)文件:

    >>> f = open("22903.dat", "rb")
    >>> d = pickle.load(f)
    >>> print d
    {"i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ....   #省略后面的數(shù)字}
    >>> f.close()
讀取自定義對(duì)象
    >>> import cPickle as pickle        #這是Python 2的引入方式,如果是Python 3,直接使用import pickle
    >>> import StringIO                 #標(biāo)準(zhǔn)庫中的一個(gè)模塊,跟file功能類似,只不過是在內(nèi)存中操作“文件”
    
    >>> class Book(object):             #自定義一種類型
    ...     def __init__(self,name):
    ...         self.name = name
    ...     def my_book(self):
    ...         print "my book is: ", self.name        #Python 3: print("my book is: ", self.name)
    ... 
    
# 存數(shù)據(jù)

>>> file = StringIO.StringIO()
>>> pickle.dump(pybook, file, 1)
    
# 取數(shù)據(jù)

>>> file.seek(0)       #找到對(duì)應(yīng)類型  
>>> pybook2 = pickle.load(file)
>>> pybook2.my_book()
my book is:  
>>> file.close()
shelve

由于數(shù)據(jù)的復(fù)雜性,pickle只能完成一部分工作,在另外更復(fù)雜的情況下,它就稍顯麻煩了。于是,又有了shelve

# 寫操作

>>> import shelve
>>> s = shelve.open("22901.db")
>>> s["name"] = "www.itdiffer.com"
>>> s["lang"] = "python"
>>> s["pages"] = 1000
>>> s["contents"] = {"first":"base knowledge","second":"day day up"}
>>> s.close()
  
# 讀操作
    
>>> s = shelve.open("22901.db")
>>> name = s["name"]
>>> print name        #Python 3: print(name)
www.itdiffer.com
>>> contents = s["contents"]
>>> print contents        #Python 3: print(contents)
{"second": "day day up", "first": "base knowledge"}

# for循環(huán)讀

>>> for k in s:
...     print k, s[k]
... 
contents {"second": "day day up", "first": "base knowledge"}
lang python
pages 1000
name www.itdiffer.com

所建立的對(duì)象被變量s所引用,就如同字典一樣,可稱之為類字典對(duì)象。所以,可以如同操作字典那樣來操作它。

但是,要小心坑:

    >>> f = shelve.open("22901.db")
    >>> f["author"]
    ["qiwsir"]
    >>> f["author"].append("Hetz")    #試圖增加一個(gè)
    >>> f["author"]                   #坑就在這里
    ["qiwsir"]
    >>> f.close()

當(dāng)試圖修改一個(gè)已有鍵的值時(shí)沒有報(bào)錯(cuò),但是并沒有修改成功。要填平這個(gè)坑,需要這樣做:
    
    >>> f = shelve.open("22901.db", writeback=True)    #多一個(gè)參數(shù)True
    >>> f["author"].append("Hetz")
    >>> f["author"]                   #沒有坑了
    ["qiwsir", "Hetz"]
    >>> f.close()

還用`for`循環(huán)一下:

    >>> f = shelve.open("22901.db")
    >>> for k,v in f.items():
    ...     print k,": ",v        #Python 3: print(k,": ",v)
    ... 
    contents :  {"second": "day day up", "first": "base knowledge"}
    lang :  python
    pages :  1000
    author :  ["qiwsir", "Hetz"]
    name :  www.itdiffer.com

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38200.html

相關(guān)文章

  • PHP面試??純?nèi)容Memcache和Redis(2)

    摘要:繼周一發(fā)布的面試常考內(nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試??純?nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。 你好,是我琉憶。繼周一(2019.2-18)發(fā)布的PHP面試常考內(nèi)容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)間為每周...

    Eric 評(píng)論0 收藏0
  • PHP面試??純?nèi)容Memcache和Redis(2)

    摘要:繼周一發(fā)布的面試??純?nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試??純?nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。 你好,是我琉憶。繼周一(2019.2-18)發(fā)布的PHP面試??純?nèi)容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)間為每周...

    sewerganger 評(píng)論0 收藏0
  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評(píng)論0 收藏0
  • [系統(tǒng)安全] 三十五.Procmon工具基本用法及文件進(jìn)程、注冊(cè)表查看

    摘要:本文將分享軟件基本用法及文件進(jìn)程注冊(cè)表查看,這是一款微軟推薦的系統(tǒng)監(jiān)視工具,功能非常強(qiáng)大可用來檢測(cè)惡意軟件。可以幫助使用者對(duì)系統(tǒng)中的任何文件注冊(cè)表操作進(jìn)行監(jiān)視和記錄,通過注冊(cè)表和文件讀寫的變化,有效幫助診斷系統(tǒng)故障或發(fā)現(xiàn)惡意軟件病毒及木馬。 ...

    kk_miles 評(píng)論0 收藏0
  • Python 基礎(chǔ)起步 (十一) 寫在最后的話(附優(yōu)秀資源匯總)

    摘要:總結(jié)不知不覺作為一個(gè)小白已經(jīng)寫完了最最基礎(chǔ)的簡單教程,如果你也和我一樣從事金融行業(yè),或者毫無編程基礎(chǔ)的小白,希望我的教程可以幫到你,這是基礎(chǔ)起步的最終篇,我希望能和大家簡單介紹一下后續(xù)介紹以及很多幫助到我的優(yōu)秀的平臺(tái)。 總結(jié) 不知不覺作為一個(gè)小白已經(jīng)寫完了最最基礎(chǔ)的Python簡單教程,如果你也和我一樣從事金融行業(yè),或者毫無編程基礎(chǔ)的小白,希望我的教程可以幫到你,這是Python基礎(chǔ)起...

    mrcode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<