ディレクトリ
A、JSONとpickleモジュール
1.1シリアル
オブジェクト(変数)プロセスからメモリに格納又は送信されてもよい平坦化、マーシャリング、また、シリアライゼーションと呼ばれる他の言語では、Pythonで酸洗と呼ばれる、シリアル化と呼ばれています。
シリアル化の利点:
- 状態を永続:(構造化)がクリアされている前に、プログラムはいくつかの時間のために実行したときに、メモリが恒久的に、データを格納していない、我々はいくつかの時間のために、プログラム上のメモリ内のデータの電源を切るか、プログラムを再起動してください。しかし、電源オフやデータを実行するために(ファイルに保存)現在メモリ内のすべてのデータが保存されているプログラムを再起動する前に、次のプログラムの前に、ファイルからロードされ、その後、シリアル化された、継続することができます。
- クロスプラットフォームのデータ交換:双方はフォーマットの良い実用的な一つのシーケンスを送信および受信することに同意した場合はシリアル化された書き込みのシリアル化ディスクの内容だけでなく、あなたはまた、別のマシンにネットワークを介して送信することができ、それがプラットフォームを破りました/言語差の上限は、クロスプラットフォームのデータ交換を実現もたらしました。
1.2 JSON
JSONモジュール:
- プログラムを書くためにJavaを使用して、Pythonでプログラムを書いて、両方のプログラムは、複数の言語で共通のデータタイプの規定の間でデータを交換する必要があります
- JSON文字列:
- シリアル化:(最も一般的)辞書からPythonのJSON文字列になり、ダンプ
- JSONからPythonの文字列辞書(最も一般的)に、負荷:デシリアライズ
JSONシリアライズはJavaや他の言語でJSONシリアライズが関与することになります、のpythonに固有のものではありませんので、JSONのシリアライズはクロスプラットフォームのデータ伝送の目的を達成することができます。
JSONデータ・タイプとデータ型対応テーブルパイソン
JSONタイプ | Pythonのタイプ |
---|---|
{} | 辞書 |
[] | リスト |
「文字列」 | STR |
520.13 | intまたはフロート |
真偽 | 真偽 |
ヌル | 無し |
図に示すように、プロセスのJSONモジュールシリアライゼーションおよびデシリアライゼーション。
# 序列化
with open('Json序列化对象.json', 'w') as fw:
json.dump(struct_data, fw)
# 反序列化
with open('Json序列化对象.json') as fr:
data = json.load(fr)
print(data)
{'name': 'json', 'age': 23, 'sex': 'male'}
import json
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))
#
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = json.dumps(struct_data)
print(data, type(data))
#
{"name": "json", "age": 23, "sex": "male"} <class 'str'>
# 注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
data = json.loads(data)
print(data, type(data))
#
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
1.3ピクルス
ピクルスシリアライゼーションおよびすべての他のプログラミング言語に固有のシリアル化の問題は、それだけのPythonを使用することができる、とPythonの互いに異なるバージョンと互換性がない可能性があり、従って、それだけでは成功しない、重要でないデータピクルスを保存することができそれは問題ではありませんデシリアライズします。しかし、オブジェクトを含むPythonですべてのデータ型を、保存することができピクルスの利点は、JSONはできません。
ピクルスモジュールシリアライゼーションおよびデシリアライゼーションプロセスは、以下に示します
# 序列化(注意:pickle模块需要使用二进制存储,即'wb'模式存储)
with open('Pickle序列化对象.pkl', 'wb') as fw:
pickle.dump(struct_data, fw)
# 反序列化
with open('Pickle序列化对象.pkl', 'rb') as fr:
pickle = pickle.load(fr)
print(data)
#
{'name': 'json', 'age': 23, 'sex': 'male'}
import pickle
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))
#
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = pickle.dumps(struct_data)
print(data, type(data))
#
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' <class 'bytes'>
data = pickle.loads(data)
print(data, type(data))
#
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>