Pythonのシリアライズとデシリアライズ(ピクルス、JSON)
1.いわゆるシリアライズとデシリアライズ:
(1)の配列:データがメモリから読み出され、又は送信処理に格納されてもよいが、シリアル化と呼ばれ
、良好なデータが格納されている、と呼ばれる、元のデータ型に変換される:(2)デシリアライズ直列化復元
注意:プログラムが実行され、データがメモリに保存されているのではなく、プログラムの再実行が、ハードディスク上のデータが初期化されます、(ファイルと呼ばれるハードディスクに格納されている)に格納されます。
2.ピクルス
ピクルスは、Pythonでのみ使用することができ、及びPythonの漬物の異なるバージョンは、互いに互換性がない場合があり、従って、ピクルスの一般的な使用は、いくつかの重要なデータを保存することは問題ではない正常にデシリアライズすることができません。
(1)、負荷ダンプ
dump
(OBJ、ファイル、プロトコル=なし、*、fix_imports =真)
load
(ファイル、 *、 fix_imports =真、 エンコーディング= "ASCII" 、 エラー= "厳しいです" )
インポートピクルス は ITER(範囲(= 10 )) 、オープン(と" test.pk "、MODE = " WB " :FPとして) pickle.dump(それは、FP) (オープンで" test.pk "モード=、" RB " )FPとして: RES = pickle.load(FP)
(2)、ロードダンプ
dumps
(OBJ、プロトコル=なし、*、fix_imports =真)
loads
(bytes_object、 *、 fix_imports = Trueを、 符号化= "ASCII" 、 "厳密な"エラー= )
インポートピクルス LSを = [1、23、23、。8、12 65である0] #は任意の一つのバイトにオブジェクトの配列:のシーケンスをダンプ RES = pickle.dumps(LS) プリント(RES、タイプ(RES)) RES = pickle.loads(RES) を印刷(RES)
3. JSON(ダンプ、ロード、ダンプ、ロード)
オブジェクトは、直列化データが文字列であるジャバスクリプト言語、標準JSONによって表され、それは広く、他の言語に適用されます。
次のようにデータ型PythonのJSONデータ型との対応は以下のとおりです。
JSON | パイソン |
オブジェクト{} | 辞書 |
配列[] | リスト |
弦 | STR |
int型/リアル | int型/フロート/列挙型 |
真偽 | 真偽 |
ヌル | 無し |
(1)、負荷ダンプ
dump
(OBJ、FP、*、skipkeys = Falseを、ensure_ascii =真、真= check_circular、allow_nan =真、CLS =なし、インデント=なし、セパレータ=なし、デフォルト=なし、sort_keys = Falseを、**キロワット)
load
(FP、*、CLS =なし、object_hook =なし、parse_float =なし、parse_int =なし、parse_constant =なし、object_pairs_hook =なし、**キロワット)
DIC = { ' 名前':" 黄某某"、" 年齢":8、" 性別":" 男性"、" 家族":[ ' 爸爸'、" 妈妈" ]} オープン(と" test.json "、モード= " W "、エンコード= " UTF-8 " FPとして): json.dump(DIC、FP、ensure_ascii = False)が オープンして("test.json 「FPとして): RES = json.load(FP)
(2)、ロードダンプ
dumps
(OBJ、*、skipkeys = Falseを、ensure_ascii =真、真= check_circular、allow_nan =真、CLS =なし、インデント=なし、セパレータ=なし、デフォルト=なし、sort_keys = Falseを、**キロワット)
loads
(S、*、エンコーディング=なし、CLS =なし、object_hook =なし、parse_float =なし、parse_int =なし、parse_constant =なし、object_pairs_hook =なし、** KW )
インポートJSON DIC = { ' 名前':" イエローXX "、" 年齢":8、" 性別":" 男性"、" 家族":" お父さん"、" お母さん" ]} #1 シリアライズ '' ' ensure_asciiあなたは真=中国= Falseのensure_ascii表示したい場合は sort_keys =辞書キー(小規模から大規模までのASCIIに従ってデフォルト)の真の一種 「」 'の RESの =のjson.dumps(DIC、ensure_ascii = Falseのを、sort_keys = TRUE) 印刷(RES、タイプ(RES)) #反序列化 RES = json.loads(RES) プリント(RES、タイプ(RES))
4.ピクルスと差JSON
'「」 :違いとピクルス#のJSON二つのモジュールは、 (1)のJSON STR後のシリアル化されたデータを入力し、 任意のプログラミング言語を識別することができるが、限定でサポートされるデータ型 連続ダンプをロードJSONは、唯一の連続していませんすべてのデータのうち、 データタイプがバイトピクルスシリアライズされた後(2)、 すべてのデータ型はしか記憶Pythonの間の伝送のために、変換することができる。 データの漬物ロード連続、複数のセットが同じファイルに配置することができます 「」「 #連続例をダンプし、負荷 「」」 JSONを:連続ダンプが、一度だけデシリアライズ外すべてのデータをロードするために、データ・エラーが生じる 。この過誤を特定、負荷が解決するのに使用することができます 「」 ' DIC = { ' A ':1、" B ":2 } オープン(と" test.json "、MODE = " W "、エンコーディング= "。8 UTF " FP AS): json.dump(DIC、FP) fp.write(' \ N- ' ) json.dump(DIC、FP) fp.write(' \ N- ' ) オープン(と" test.json 」)FP AS: #1 RES = json.load(FP)エラー のために I におけるFP: # 。サイクル、続いて、辞書にデシリアライズ、行を読み取る RES =のjson.loads(I) プリント(RES、タイプ(RES))