1. 程式人生 > >python學習day4之路文件的序列化和反序列化

python學習day4之路文件的序列化和反序列化

data 多次 文件交互 由於 mps logs json tro 之路

json和pickle序列化和反序列化

  json是用來實現不同程序之間的文件交互,由於不同程序之間需要進行文件信息交互,由於用python寫的代碼可能要與其他語言寫的代碼進行數據傳輸,json支持所有程序之間的交互,json將取代XML,由於XML格式稍微比較復雜。現在程序之間的交互都是用json來進行文件信息的交互。

  在使用json序列化和反序列化的時候,dump一次,就要load一次,不能操作。

  技術分享

  json序列化的過程,就是寫入文件中,讓另外一個編程語言進行調用:

  import json

  info = {"alex":"sb","test":"hard"}

  with open("file","w") as f:
    f.write(json.dumps(info))

  上述代碼使用json將info字典信息寫入到一個文件中,文件中只能存儲字符串格式的信息,或者二進制文件的信息,不能存放數字等信息,放入文件中的信息都是字符串類型的,這點一定要註意.

  json反序列化的過程:

  import json

  ‘‘‘反序列化起始就是把dump進去的信息進行提取,以實現不同編程語言的交互‘‘‘

  with open("file","r") as f:
    data = json.loads(f.read())
    print(data)
    print(type(data))
    print(data["alex"])

  

  上面代碼,將使用json格式存入的信息讀取出來,如下所示:

  {‘test‘: ‘hard‘, ‘alex‘: ‘sb‘}
  <class ‘dict‘>
  sb
  上述代碼實現了將字符串信息讀取問字典的功能,其實,序列化和反序列化就是將原來的格式先轉化為字符串,然後在讀取出來的過程,以便能夠實現交互.

  我們也可以使用其他方式進行序列化和反序列化,我們知道,有一個函數eval(),能夠實現把字符串信息轉化為原本樣式,如下:

  info = [11,22,33,65,33]

  with open("test.text","w") as f:
    f.write(str(info)) #使用wirte()只能向文件中寫入字符串格式的信息,不能寫入其他類型的信息

  with open("test.text","r") as f_obj:
    data = f_obj.read()

    data = eval(data)
    print(type(data))
    print(data)

  

  程序運行如下:

  <class ‘list‘>
  [11, 22, 33, 65, 33]
  上述過程中,我們利用python自帶的eval()函數也實現了序列化和反序列化的過程,但是由於序列化和反序列化是在同一個程序中實現的,在其他程序中有沒有eval()是不確定的,但是json支持所有的編程語言,所以現在一般都使用json實現不同編程語言之間的信息交互.

  dump和load也是實現上面dumps和loads的功能,只是實現的方式不一樣而言,語法稍微有一些區別,如下:

  dump序列化:

  import json

  info = {"alex":"sb","test":"hard"}

  with open("file","w") as f:
    json.dump(info,f)

  load()反序列化:

  import json

  ‘‘‘反序列化起始就是把dump進去的信息進行提取,以實現不同編程語言的交互‘‘‘

  with open("file","r") as f:
    data = json.load(f)
    print(data)
    print(type(data))
    print(data["alex"])
  

  上面程序實現了序列化和反序列化的功能,dump(信息,文件路徑),load(文件路徑),從哪個文件讀取信息.

  在不同程序間實現數據的交換.

  不同程序之間的數據交換,或者是將字符串的信息轉化為原有的形式;

  eval()函數的功能也很強大,能夠之間將字符串形式的信息轉化為原有的信息,如下:

  >>> dic = "{‘alex‘:‘sb‘,‘try‘:‘workhard‘}"
  >>> data = eval(dic)
  >>> data
  {‘try‘: ‘workhard‘, ‘alex‘: ‘sb‘}

  程序只dump一次,load一次,不能dump多次.dumps好幾個文件實現; 

python學習day4之路文件的序列化和反序列化