ホームページ  >  記事  >  バックエンド開発  >  jsonとpickleの使い方の紹介

jsonとpickleの使い方の紹介

PHP中文网
PHP中文网オリジナル
2017-06-21 16:48:501122ブラウズ

json

jsonは、プログラムのデータ型のシリアル化と逆シリアル化を行うモジュールの1つです。異なるプラットフォームや異なるプログラムでデータを交換したり、プログラムがデータを一時的に保存する方法として使用できます。 json の使用法を見てみましょう:

 1 #json_序列化.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 date=json.dumps(dic) 9 with open("demo.txt","w") as f:10     f.write(date)11 12 #json_反序列化.py13 import json14 with open("demo.txt","r") as f:15     dic1=json.loads(f.read())16 print(dic1["name"])

2 つのファイルの内容は上に示されています。最初のファイルは、(dumps() メソッドを使用して) 辞書を文字列にシリアル化してから書き込みます。ファイル (demo.txt) に保存します。 2 番目のファイルは、demo.txt の内容を読み取り、loads() メソッドを使用してそれを実行可能な辞書オブジェクトに逆シリアル化し、辞書の「名前」の内容を出力します。

実際、json には、dumps() メソッドとloads() メソッドに加えて、より単純な 2 つのメソッド、dump() とload() があります。使用法を以下に示します:

 1 #json_序列化2.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 with open("demo.txt","w") as f: 9     date=json.dump(dic,f)10 11     12 13 #json_反序列化2.py14 import json15 with open("demo.txt","r") as f:16     dic1=json.load(f)17 print(dic1["name"])

比較すると、dump() とload() が dumps()、loads() およびファイルの読み取りおよび書き込み操作をカプセル化していることがわかります。

pickle

pickleにも上記4つのjsonメソッドがあり、使い方は全く同じなのでここでは説明しません。しかし、ピクルスの方が強力です。 json は、リスト、辞書などの比較的単純なデータ オブジェクトのみをシリアル化できます。 Pickle は、関数やクラスなどの複雑なオブジェクトをシリアル化することもできます。

以下は、pickle が関数をシリアル化および逆シリアル化する方法を示しています。

 1 #pickle_序列化.py 2 import pickle 3 #定义函数hello 4 def hello(name): 5     print("hello",name) 6 #定义列表,把hello也存进去 7 dic1={ 8     "name":"Mark", 9     "func":hello10     }11 with open("demo.txt","wb") as f:12     pickle.dump(dic1,f)13 14 #pickle_反序列化.py15 import pickle16 #######################17 def hello(name):18     print("hello",name)19 #######################20 with open("demo.txt","rb")as f:21     dic2=pickle.load(f)22 dic2["func"]("Jack")

2 つのファイルの内容も上に示しています。次の問題に注意してください:

1. ファイルを開くとき、関数やクラスなどのシリアル化と逆シリアル化に関しては、「wb」と「rb」に注意してください。

2. デシリアライズされた関数を新しいファイルで実行したい場合は、以前に定義した関数のソース コードを新しいファイルにコピーする必要があります (pickle_deserialization.py の内容に注意してください)。 # 行)、そうでない場合、# 行にコンテンツがない場合、プログラムはエラーを報告します: AttributeError: Can't get Attribute 'hello' on

3. コピーした関数のソース コードを変更できます。必要なのは、関数名がシリアル化中に使用された関数名と一致していることだけです。変更後の関数を呼び出すと、関数、変更された関数に従って実行されます(もちろんこの変更は必要です)

以上がjsonとpickleの使い方の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。