1. 程式人生 > 其它 >SOTA效果+一鍵預測,PaddleNLP帶你玩轉11類NLP任務

SOTA效果+一鍵預測,PaddleNLP帶你玩轉11類NLP任務

api介面開發,最核心最常見的一個過程就說序列化,所謂序列化就說把資料轉換格式。

序列化:

  把我們語言識別的資料轉化成指定的格式提供給別人

反序列化:

  把別人提供的資料轉換/還原成我們需要的格式

Django中的序列化和反序列化

  序列化過程:

    我們再Django中獲取到的資料預設是模型物件(qs物件),但是模型物件資料無法直接提供給前端或別的平臺使用,所以我們需要把資料進行序列化,變成字串或者json資料,提供給別人。

  反序列化過程:

    前端傳入到後端的資料是json格式的字串給到了後端,後端存到資料庫中,需要轉成python中的物件,把json格式字串轉成python物件存到資料庫的過程稱為反序列化

相關模組

模組名稱 描述 提供的api
json 用於實現Python資料型別與通用(json)字串之間的轉換 dumps()、dump()、loads()、load()
pickle 用於實現Python資料型別與Python特定二進位制格式之間的轉換 dumps()、dump()、loads()、load()
shelve 專門用於將Python資料型別的資料持久化到磁碟,shelve是一個類似dict的物件,操作十分便捷 open()

json模組

  1、Python的JSON模組 序列化與反序列化的過程分別叫做:encoding 和 decoding。

    encoding:

 把Python物件轉換成JSON字串

    decoding: 把JSON字串轉換成python物件

  json模組的序列化和反序列化操作

# 序列化:將Python物件轉換成json字串
dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

# 反序列化:將json字串轉換成Python物件
loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

  序列化後得到的json資料儲存到檔案中,以及直接讀取檔案中的json資料進行反序列化操作:

# 序列化:將Python物件轉換成json字串並存儲到檔案中
dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

# 反序列化:讀取指定檔案中的json字串並轉換成Python物件
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

  2、JSON與Python之間資料型別對應關係

  Python轉JSON

Python JSON
dict Object
list, tuple array
str string
int, float, int- & float-derived Enums numbers
True true
False false
None null

  JSON轉python

JSON Python
object dict
array list
string str
number(int) int
number(real) float
true True
false False
null None

pickle模組

  pickle模組實現了用於對Python物件結構進行 序列化 和 反序列化 的二進位制協議,pickle模組序列化和反序列化的過程分別叫做 pickling 和 unpickling:

    pickling: 是將Python物件轉換為位元組流的過程;

    unpickling: 是將位元組流二進位制檔案或位元組物件轉換回Python物件的過程;

  1、pickle模組與json模組對比

    JSON是一種文字序列化格式(它輸出的是unicode檔案,大多數時候會被編碼為utf-8),而pickle是一個二進位制序列化格式;

    JOSN是我們可以讀懂的資料格式,而pickle是二進位制格式,我們無法讀懂;

    JSON是與特定的程式語言或系統無關的,且它在Python生態系統之外被廣泛使用,而pickle使用的資料格式是特定於Python的;

    預設情況下,JSON只能表示Python內建資料型別,對於自定義資料型別需要一些額外的工作來完成;pickle可以直接表示大量的Python資料型別,包括自定資料型別(其中,許多是通過巧妙地使用Python內省功能自動實現的;複雜的情況可以通過實現specific object API來解決)

  2、pickle模組使用的資料流格式

    pickle使用的資料格式是特定於Python的。這使得它不受諸如JSON或XDR的外部標準限值,但是這也意味著非Python程式可能無法重建pickled Python物件。預設情況下,pickle資料格式使用相對緊湊的二進位制表示。如果需要最佳大小特徵,可以有效的壓縮pickled資料。pickletools模組包含可以用於對pickle生成的資料流進行分析的工具。目前有5種不同的協議可以用於pickle。使用的協議越高,就需要更新的Python版本去讀取pickle產生的資料:

    協議v0是原始的“人類可讀”協議,並且向後相容早期的Python版本;

    協議v1是一箇舊的二進位制格式,也與早期版本的Python相容;

    協議v2在Python 2.3中引入,它提供更高效的pickling;

    協議v3是在Python 3.0新增的協議,它明確支援bytes物件,且不能被Python 2.x 進行unpickle操作;這是預設協議,也是當需要相容其他Python 3版本時被推薦使用的協議;

    協議4是在Python 3.4新增的協議,它添加了對極大物件的支援,pickling更多種類的物件,以及一些資料格式的優化。

  3、pickle模組提供的相關函式

    pickle模組提供的幾個序列化/反序列化的函式與json模組基本一致:

# 將指定的Python物件通過pickle序列化作為bytes物件返回,而不是將其寫入檔案
dumps(obj, protocol=None, *, fix_imports=True)

# 將通過pickle序列化後得到的位元組物件進行反序列化,轉換為Python物件並返回
loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")

# 將指定的Python物件通過pickle序列化後寫入開啟的檔案物件中,等價於`Pickler(file, protocol).dump(obj)`
dump(obj, file, protocol=None, *, fix_imports=True)

# 從開啟的檔案物件中讀取pickled物件表現形式並返回通過pickle反序列化後得到的Python物件
load(file, *, fix_imports=True, encoding="ASCII", errors="strict")

  說明: 上面這幾個方法引數中,*號後面的引數都是Python 3.x新增的,目的是為了相容Python 2.x,具體用法請參看官方文件。

shelve模組

  shelve是一個簡單的資料儲存方案,類似key-value資料庫,可以很方便的儲存python物件,其內部是通過pickle協議來實現資料序列化。shelve只有一個open()函式,這個函式用於開啟指定的檔案(一個持久的字典),然後返回一個shelf物件。shelf是一種持久的、類似字典的物件。它與“dbm”的不同之處在於,其values值可以是任意基本Python物件--pickle模組可以處理的任何資料。這包括大多數類例項、遞迴資料型別和包含很多共享子物件的物件。keys還是普通的字串。

open(filename, flag='c', protocol=None, writeback=False)

  flag 引數表示開啟資料儲存檔案的格式,可取值與dbm.open()函式一致:

描述
'r' 以只讀模式開啟一個已經存在的資料儲存檔案
'w' 以讀寫模式開啟一個已經存在的資料儲存檔案
'c' 以讀寫模式開啟一個數據儲存檔案,如果不存在則建立
'n' 總是建立一個新的、空資料儲存檔案,並以讀寫模式開啟

  protocol 引數表示序列化資料所使用的協議版本,預設是pickle v3;

  writeback 引數表示是否開啟回寫功能。

附錄

要實現的功能 可以使用的api
將Python資料型別轉換為(json)字串 json.dumps()
將json字串轉換為Python資料型別 json.loads()
將Python資料型別以json形式儲存到本地磁碟 json.dump()
將本地磁碟檔案中的json資料轉換為Python資料型別 json.load()
將Python資料型別轉換為Python特定的二進位制格式 pickle.dumps()
將Python特定的的二進位制格式資料轉換為Python資料型別 pickle.loads()
將Python資料型別以Python特定的二進位制格式儲存到本地磁碟 pickle.dump()
將本地磁碟檔案中的Python特定的二進位制格式資料轉換為Python資料型別 pickle.load()
以型別dict的形式將Python資料型別儲存到本地磁碟或讀取本地磁碟資料並轉換為資料型別 shelve.open()

詳情:https://www.cnblogs.com/yyds/p/6563608.html