成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python的數據序列化「Json & Pickle」

開發 前端
數據序列化就是將對象或者數據結構轉化成特定的格式,使其可在網絡中傳輸,或者可存儲在內存或者文件中。反序列化則是相反的操作,將對象從序列化數據中還原出來。

 

[[174004]]

 

在介紹Python的數據序列化模塊「Json & Pickle」之前,我們先來看看為什么需要數據序列化,什么是數據序列化。

為什么需要數據序列化,我認為有如下兩種原因:

一個原因是將對象(一切皆對象)的狀態保持在存儲媒介(硬盤、網盤......)中,以便可以在以后重新創建精確的副本,相當于鏡像的概念,比如我們平時利用VMware虛擬機中的掛起功能,這個掛起功能就是利用數據的序列化,把虛擬機當前的狀態序列化保存在本地磁盤的文件中,然后恢復的時候只需反序列化,把狀態恢復即可。

另一個原因是通過值將對象從一個應用程序域發送到另一個應用程序域中。例如,你利用Python監控采集程序采集到的數據想傳送給Zabbix處理。當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為對象。

序列化和反序列化:

  • 序列化: 將數據結構或對象轉換成二進制串的過程。
  • 反序列化:將在序列化過程中所生成的二進制串轉換成數據結構或者對象的過程。

序列化的目的就是為了跨進程傳遞格式化數據和保存某個時刻的狀態。

什么是數據序列化:

數據序列化就是將對象或者數據結構轉化成特定的格式,使其可在網絡中傳輸,或者可存儲在內存或者文件中。反序列化則是相反的操作,將對象從序列化數據中還原出來。而對象序列化后的數據格式可以是二進制,可以是XML,也可以是JSON等任何格式。對象/數據序列化的重點在于數據的交換和傳輸,例如在遠程調用技術(如EJB,XML-RPC, Web Service),或者在GUI控件開發(JavaBean)等等。

清楚了數據格式化的必要和簡單認識了什么是數據格式化之后,我們就來看看Python中兩個數據格式化模塊的使用。

Json Module

Json:用于字符串和 python數據類型間進行轉換;

Json模塊提供了四個功能:dumps、dump、loads、load

1.dumps把數據類型轉換成字符串

2.dump把數據類型轉換成字符串并存儲在文件中

3.loads把字符串轉換成數據類型

4.load把文件打開從字符串轉換成數據類型

實例如下:

  1. #!/usr/bin/env python3 
  2. # _*_coding:utf-8_*_ 
  3. # Author: Lucky.chen 
  4.  
  5. import json 
  6.  
  7. info = {'1MinLoad': 5, 'MemUse': '5G', 'DiskUse': '80G'} 
  8.  
  9. print('dumps 操作之前數據類型: %s' % type(info)) 
  10. JsonInfo = json.dumps(info) 
  11. print(JsonInfo) 
  12. # dumps 將數據通過特殊的形式轉換為所有程序語言都識別的字符串 
  13. print('dumps 操作之后數據類型: %s' % type(JsonInfo)) 
  14.  
  15. # loads 將字符串通過特殊的形式轉為python是數據類型  (將字符串轉為字典) 
  16. NewInfo = json.loads(JsonInfo) 
  17. print('loads 操作之后數據類型為: %s' % type(NewInfo)) 
  18.  
  19. print('分割線'.center(50, '-')) 
  20.  
  21. # dump 將數據通過特殊的形式轉換為所有語言都識別的字符串并寫入文件 
  22. with open('SystemInfo.txt', 'w') as f: 
  23.     json.dump(info, f) 
  24.     print('dump file end!!') 
  25.  
  26. # load 從文件讀取字符串并轉換為python的數據類型 
  27. with open('SystemInfo.txt', 'r') as f: 
  28.     LoadInfo = json.load(f) 
  29.     print('load file end, data type is %s' % type(LoadInfo), LoadInfo) 

結果如下:

  1. dumps 操作之前數據類型: <class 'dict'> 
  2. {"MemUse": "5G", "DiskUse": "80G", "1MinLoad": 5} 
  3. dumps 操作之后數據類型: <class 'str'> 
  4. loads 操作之后數據類型為: <class 'dict'> 
  5. -----------------------分割線------------------------ 
  6. dump file end!! 
  7. load file end, data type is <class 'dict'> {'MemUse': '5G', '1MinLoad': 5, 'DiskUse' 

一個錯誤案例如下:

  1. #!/usr/bin/env python3 
  2. # _*_coding:utf-8_*_ 
  3. # Author: Lucky.chen 
  4.  
  5. import json 
  6.  
  7.  
  8. def test(): 
  9.     print('Test Func') 
  10.  
  11. info = {'Name': 'crh', 'age': 18, 'Func': test} 
  12.  
  13. json.dumps(info) 

結果:

  1. raise TypeError(repr(o) + " is not JSON serializable") 
  2. ypeError: <function test at 0x108e7a0d0> is not JSON serializable 

如上可知函數不能被json序列化。

Pickle Module

pickle,用于python特有的類型 和 python的數據類型間進行轉換

Pickle模塊同樣提供了四個功能:dumps、dump、loads、load

1.dumps把數據類型轉換成字符串

2.dump把數據類型轉換成字符串并存儲在文件中

3.oads把字符串轉換成數據類型

4.load把文件打開從字符串轉換成數據類型

Pickle可以序列化一些較復雜的數據,和json的區別在于pickle序列化的時候,存放的是二進制的文件,所以打開一個文件的時候,我們要以二進制的格式打開。

實例如下:

  1. #!/usr/bin/env python3 
  2. # _*_coding:utf-8_*_ 
  3. # Author: Lucky.chen 
  4.  
  5. import pickle 
  6.  
  7.  
  8. def test(name): 
  9.     print('%s write Test Func' % name) 
  10.  
  11. info = {'Name': 'crh', 'age': 18, 'Func': test} 
  12.  
  13. print('dumps 之前數據的類型為: %s' % type(info)) 
  14.  
  15. # pickle.dumps 將數據通過特殊的形式轉換為只有python語言認識bytes類型(Python2.*中是字符串類型) 
  16. NewInfo = pickle.dumps(info) 
  17. print('dumps result is %s, data type is %s' % (NewInfo, type(NewInfo))) 
  18.  
  19. # pickle.loads 將bytes通過特殊的形式轉為python是數據類型 
  20. LoadInfo = pickle.loads(NewInfo) 
  21. print('loads result is %s, data type is %s' % (LoadInfo, type(LoadInfo))) 
  22. LoadInfo['Func']('crh') 
  23.  
  24. print('分割線'.center(50, '-')) 
  25.  
  26. # pickle.dump 將數據通過特殊的形式轉換為只有python語言認識的字符串,并寫入文件 
  27. with open('pickle.rb', 'wb') as f: 
  28.     pickle.dump(info, f) 
  29.  
  30. # pickle.load 從文件讀取只有python語言認識的字符串并轉換為python的數據類型 
  31. with open('pickle.rb', 'rb') as f: 
  32.     Info = pickle.load(f) 
  33.  
  34. print(Info, 'type is %s' % type(Info)) 

結果如下:

  1. dumps 之前數據的類型為: <class 'dict'> 
  2. dumps result is b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x12X\x04\x00\x00\x00Nameq\x02X\x03\x00\x00\x00crhq\x03X\x04\x00\x00\x00Funcq\x04c__main__\ntest\nq\x05u.', data type is <class 'bytes'> 
  3. loads result is {'age': 18, 'Name': 'crh', 'Func': <function test at 0x1032f10d0>}, data type is <class 'dict'> 
  4. crh write Test Func 
  5. -----------------------分割線------------------------ 
  6. {'age': 18, 'Name': 'crh', 'Func': <function test at 0x1032f10d0>} type is <class 'di 

總結

很多情況下不同的程序之間傳送數據我們一般通過文件的方式,但是這個方法是最原始的,而dumps可以直接讓數據格式化傳送給對方,但是不是所有的程序都是python的,所以只利用pickle是不現實的,比如一個python的程序需要發送一段數據給一個java程序開發的應用,這時候很多內存數據的交換,就得用json了。

并且josn能dump的結果更可讀,那么有人就問了,那還用pickle做什么不直接用josn,是這樣的josn只能把常用的數據類型序列化(列表、字典、列表、字符串、數字、),比如日期格式、類對象!josn就不行了。

為什么他不能序列化上面的東西呢?因為josn是跨語言的!注定了它只能規范出一些通用的數據類型的格式,統一標準。

責任編輯:趙寧寧 來源: 開源技術社區
相關推薦

2023-12-12 08:31:04

文件操作PythonJSON

2013-03-11 13:55:03

JavaJSON

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2021-11-18 07:39:41

Json 序列化Vue

2018-01-17 16:38:07

MSONJSON序列化

2022-07-06 14:16:19

Python數據函數

2023-12-13 13:49:52

Python序列化模塊

2023-11-20 08:44:18

數據序列化反序列化

2011-06-01 15:05:02

序列化反序列化

2024-04-28 08:56:58

大數據框架Json

2022-08-06 08:41:18

序列化反序列化Hessian

2018-03-19 10:20:23

Java序列化反序列化

2024-10-07 08:26:53

2010-01-08 11:11:38

JSON 序列化

2025-06-06 02:00:00

JavaJSON字段

2009-06-14 22:01:27

Java對象序列化反序列化

2024-01-30 13:32:51

JSON反序列化序列化

2009-08-24 17:14:08

C#序列化

2011-06-01 14:26:11

序列化

2012-04-13 10:45:59

XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天色天天射天天干 | 国产精品视频yy9299一区 | 日韩有码一区 | 一区二区精品视频 | 性色视频| 中文字幕免费在线 | 国产精品一区二区久久精品爱微奶 | 美女视频.| 久久成人精品视频 | 久久中文字幕视频 | 欧美精品成人 | 国产成人91视频 | 一区二区久久 | 成人在线电影在线观看 | 91在线免费观看网站 | 日韩三级电影在线看 | 色频| 久热久热 | 欧美日韩综合 | 精品日韩在线 | 99re在线视频观看 | 日韩精品一区二区三区视频播放 | 黄色毛片在线播放 | 天堂成人国产精品一区 | 亚洲一区二区视频 | 国产精品明星裸体写真集 | 黄色片亚洲 | 91精品国产一二三 | 中文字幕免费 | 成人一区二区在线 | а√中文在线8 | 日韩欧美一区二区三区四区 | 久久亚洲精品久久国产一区二区 | 五月天婷婷综合 | 精品国产91乱码一区二区三区 | 国产精品观看 | 在线亚洲免费视频 | 日韩一区二区久久 | www.9191| 一a级片 | 一区二区三区在线看 |