1. 程式人生 > >Python基礎知識之json&pickle

Python基礎知識之json&pickle

json & pickle模組

  1. json模組:只適用於簡單的資料型別,是一種跨平臺的模組。

    假設我們有了一段資料是這樣定義的:

    info = {
        'name':'alex',
        'age':22
    }

    對於這種簡單的資料型別,我們可以直接使用Json來進行資料的序列化和反序列化:

    • 序列化dumps

      import json
      f = open("test.text","wb")
      f.write(json.dumps(info))
      f.close()

      同樣的,我們可以使用dump方法來代替dumps方法:
      只需要將f.write(json.dumps(info))


      替換成json.dump(info,f)就可以了。

    • 反序列化loads

      import json
      f = open("test.txt","rb")
      data = json.loads(f.read())
      

      同樣的,我們可以使用dump方法來代替dumps方法:
      只需要將f.write(json.dumps(info))
      替換成json.dump(info,f)就可以了。

  2. pickle模組:能夠轉換傳遞複雜的資料型別,是Python特有的一種資料型別。

    通過上面的json模組我們發現,json只能傳遞一些簡單的資料型別,如果我們想給info新增一個函式呢?

    def
    sayhi(name):
    print("hello2,",name) info = { 'name':'alex', 'age':22 'func':sayhi }

    這個時候,就需要使用我們的pickle模組了。

    • 序列化dumps
      python
      import pickle
      f = open("test.text","wb")
      f.write(json.pickle(info))
      f.close()

      同樣的,我們可以使用dump方法來代替dumps方法:
      只需要將f.write(pickle.dumps(info))
      替換成pickle.dump(info,f)
      就可以了。
    • 反序列化loads

      import pickle
      def sayhi(name):
          print("hi"+name)
      
      f = open("test.txt","rb")
      data = pickle.loads(f.read())
      

      同樣的,我們可以使用dump方法來代替dumps方法:
      只需要將f.write(picklejson.dumps(info))
      替換成pickle.dump(info,f)就可以了。

      需要注意的是,在反序列話的時候,需要先重新定義sayhi()函式。

  3. 注意事項:

    在使用json模組和pickle模組序列化和反序列化資料的時候採取的是一dump一load的原則,即只dump一份同時也只load一份。