jsonとpickleの2つのシーケンス化モジュールの詳細
15203 ワード
直列化に使用される2つのモジュール
jsonは4つの機能を提供します:dumps,dump,loads,load
pickleは4つの機能を提供します:dumps,dump,loads,load
pickleモジュールとjsonモジュールは比較的実用的であり、さらに多くの情報を知ることができ、より多くの情報を知りたければpython公式のAPIドキュメント(libraryファイル)を読むことができる.また、pythonインタラクティブモードにjsonとpickleモジュールを導入し、help(モジュール[.メソッド名])方式で見ることもできる.
では、なぜシーケンス化と逆シーケンス化が必要なのでしょうか.保存しやすい.(pickle)シーケンス化プロセスは、テキスト情報をバイナリデータストリームに変換します.これにより、情報がハードディスクに格納されやすくなり、ファイルを読み取る必要がある場合、ハードディスクからデータを読み出し、逆シーケンス化すると元のデータが得られます.
jsonモジュール
1、json.dumps()
json.dumps()はdictタイプのデータをstrに変換するために使用されます.dictタイプのデータをjsonファイルに直接書き込むとエラーが発生するため、データを書き込む際にこの関数を使用する必要があります.
2、json.loads()
json.loads()はstrタイプのデータをdictに変換するために使用されます.
上のjson文字列dict_からto_str 1 loads()を使用してdickに変換できます
また,jsonモジュール法dumpsとloadsの運用は爬虫類過程における応用において非常に重要であり,応答を要求した後,多くのjsonフォーマットのファイルに直面し,jsonモジュールの役割が現れる.
3、json.dump()
json.dump()はdictタイプのデータをstrに変換するjsonファイルに書き込むためのものである.
4、json.load()
json.load()はjsonファイルからデータを読み出すために使用されます.
pickleモジュール
pickleはどんなタイプのデータを格納できますか? pythonがサポートするすべてのオリジナルタイプ:ブール値、整数、浮動小数点数、複素数、文字列、バイト、None. は、任意のオリジナルタイプからなるリスト、メタグループ、辞書、および集合である. 関数、クラス、クラスのインスタンス Pythonプログラムの実行中にいくつかの文字列、リスト、辞書などのデータを得て、長い間保存したいと思って、便利に後で使用して、簡単にメモリの中で電源を切って電気を切ってデータを失うのではありません.pythonモジュールの大全にあるPickleモジュールは、オブジェクトを転送または格納可能なフォーマットに変換するのに役立ちます.
1.pickle.dump(obj, file, protocol=None, )
必須パラメータobjは、カプセル化するオブジェクトを表し、必須パラメータfileはobjが書き込むファイルオブジェクトを表し、fileはバイナリ書き込み可能モードで開く必要があります.すなわち「wb」
2.pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
必須パラメータfileは、バイナリ読み取り可能モード、すなわちrbで開く必要があります.その他はオプションです.
3.pickle.dumps(obj):カプセル化されたオブジェクトをバイトオブジェクトとして返し、ファイルに書き込む必要はありません.
4.pickle.loads(bytes_object):カプセル化されたオブジェクトをバイトオブジェクトから読み出し、返します.
pickleモジュールでは、3つの例外が発生する可能性があります.
1.PickleError:カプセル化と開封時に発生する異常クラスで、Exception 2から継承する.PicklingError:カプセル化できないオブジェクトに遭遇したときに発生する異常は、PickleError 3から継承される.UnPicklingError:オブジェクトのカプセル化中に発生した例外.PickleErrorから継承
この文書のコンテンツ参照は、次のリンクを参照しています.
1.http://www.php.cn/python-tutorials-372984.html 2.https://blog.csdn.net/weixin_42329277/article/details/80495065 3.https://blog.csdn.net/brink_compiling/article/details/54932095
小結
付pythonインタラクションモードでjsonモジュールをインポートしhelp(モジュール.メソッド名)方式で得られたjson解釈結果
json: Python
pickle: python python
jsonは4つの機能を提供します:dumps,dump,loads,load
pickleは4つの機能を提供します:dumps,dump,loads,load
pickleモジュールとjsonモジュールは比較的実用的であり、さらに多くの情報を知ることができ、より多くの情報を知りたければpython公式のAPIドキュメント(libraryファイル)を読むことができる.また、pythonインタラクティブモードにjsonとpickleモジュールを導入し、help(モジュール[.メソッド名])方式で見ることもできる.
では、なぜシーケンス化と逆シーケンス化が必要なのでしょうか.保存しやすい.(pickle)シーケンス化プロセスは、テキスト情報をバイナリデータストリームに変換します.これにより、情報がハードディスクに格納されやすくなり、ファイルを読み取る必要がある場合、ハードディスクからデータを読み出し、逆シーケンス化すると元のデータが得られます.
jsonモジュール
1、json.dumps()
json.dumps()はdictタイプのデータをstrに変換するために使用されます.dictタイプのデータをjsonファイルに直接書き込むとエラーが発生するため、データを書き込む際にこの関数を使用する必要があります.
import json
print("json.dumps()")
d1 = {"a": 1, "b": 2, "c": 3, "d": 4}
print(d1)
print("d1 :", type(d1))
dict_to_str1 = json.dumps(d1)
print(dict_to_str1)
print("dict_to_str1 :", type(dict_to_str1))
print("*" * 50)
# json.dumps()
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# d1 :
# {"a": 1, "b": 2, "c": 3, "d": 4}
# dict_to_str1 :
# **************************************************
2、json.loads()
json.loads()はstrタイプのデータをdictに変換するために使用されます.
上のjson文字列dict_からto_str 1 loads()を使用してdickに変換できます
print("json.loads()")
d2 = json.loads(dict_to_str1)
print(d2)
print("d2 :", type(d2))
print("*" * 50)
# json.loads()
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# d2 :
# **************************************************
また,jsonモジュール法dumpsとloadsの運用は爬虫類過程における応用において非常に重要であり,応答を要求した後,多くのjsonフォーマットのファイルに直面し,jsonモジュールの役割が現れる.
3、json.dump()
json.dump()はdictタイプのデータをstrに変換するjsonファイルに書き込むためのものである.
print("json.dump()")
import os
# os.chdir(r"C:\Users\999\Desktop")
# print(os.getcwd())
os.chdir(r"C:\Users\999\Desktop")
# ,
print(" :", os.getcwd())
temp_dict = {'a': '11', 'b': '22', 'c': '33', 'd': '44', "e":{"aa":'a1', "bb":"b1", "cc":{"c1":"ccc1", "c2":"ccc2", "c3":"ccc3"}}}
temp_json_filename = 'temp_json.json'
print(temp_dict)
print("temp_dict :", type(temp_dict))
jsObj = json.dumps(temp_dict)
with open(os.getcwd() + "\\" + temp_json_filename, "w", encoding="utf-8") as f:
f.write(jsObj)
print(" ")
print("*" * 50)
# json.dump()
# : C:\Users\999\Desktop
# {'a': '11', 'b': '22', 'c': '33', 'd': '44', 'e': {'aa': 'a1', 'bb': 'b1', 'cc': {'c1': 'ccc1', 'c2': 'ccc2', 'c3': 'ccc3'}}}
# temp_dict :
#
# **************************************************
4、json.load()
json.load()はjsonファイルからデータを読み出すために使用されます.
print("json.load()")
with open(os.getcwd() + "\\" + temp_json_filename, "r") as fr:
temp_dict_ByLoad = json.load(fr)
print(" ")
print(temp_dict_ByLoad)
print("temp_dict_ByLoad :", type(temp_dict_ByLoad))
print("*" * 50)
# json.load()
#
# {'a': '11', 'b': '22', 'c': '33', 'd': '44', 'e': {'aa': 'a1', 'bb': 'b1', 'cc': {'c1': 'ccc1', 'c2': 'ccc2', 'c3': 'ccc3'}}}
# temp_dict_ByLoad :
# **************************************************
pickleモジュール
pickleはどんなタイプのデータを格納できますか?
1.pickle.dump(obj, file, protocol=None, )
必須パラメータobjは、カプセル化するオブジェクトを表し、必須パラメータfileはobjが書き込むファイルオブジェクトを表し、fileはバイナリ書き込み可能モードで開く必要があります.すなわち「wb」
print("json.dump()")
import pickle
data1 = ["qq","www","e","rrr4"]
temp_pickle_filename = "temp_pickle.pk"
with open(os.getcwd() + "\\" + temp_pickle_filename, "wb") as fw:
pickle.dump(data1,fw)
print(data1)
print("data1 :", type(data1))
print(" ")
print("*" * 50)
# json.dump()
# ['qq', 'www', 'e', 'rrr4']
# data1 :
#
# **************************************************
2.pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
必須パラメータfileは、バイナリ読み取り可能モード、すなわちrbで開く必要があります.その他はオプションです.
print("json.load()")
with open(os.getcwd() + "\\" + temp_pickle_filename, "rb") as fr:
data2 = pickle.load(fr)
print(data2)
print("data2 :", type(data2))
print("*" * 50)
# json.load()
# ['qq', 'www', 'e', 'rrr4']
# data2 :
# **************************************************
3.pickle.dumps(obj):カプセル化されたオブジェクトをバイトオブジェクトとして返し、ファイルに書き込む必要はありません.
print('pickle.dumps(obj)')
temp_pickle_filename = ""
data3 = ['aa', 'bb', 'cc']
print(data3)
print("data3 :", type(data3))
# dumps python
change_str = pickle.dumps(data3)
print(change_str)
print("change_str :", type(change_str))
print("*" * 50)
# pickle.dumps(obj)
# ['aa', 'bb', 'cc']
# data3 :
# b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.'
# change_str :
# **************************************************
4.pickle.loads(bytes_object):カプセル化されたオブジェクトをバイトオブジェクトから読み出し、返します.
print('pickle.loads(bytes_object)')
data4 =pickle.loads(change_str)
print(data4)
print("data4 :", type(data4))
print("*" * 50)
# pickle.loads(bytes_object)
# ['aa', 'bb', 'cc']
# data4 :
# **************************************************
pickleモジュールでは、3つの例外が発生する可能性があります.
1.PickleError:カプセル化と開封時に発生する異常クラスで、Exception 2から継承する.PicklingError:カプセル化できないオブジェクトに遭遇したときに発生する異常は、PickleError 3から継承される.UnPicklingError:オブジェクトのカプセル化中に発生した例外.PickleErrorから継承
この文書のコンテンツ参照は、次のリンクを参照しています.
1.http://www.php.cn/python-tutorials-372984.html 2.https://blog.csdn.net/weixin_42329277/article/details/80495065 3.https://blog.csdn.net/brink_compiling/article/details/54932095
小結
, , 。
付pythonインタラクションモードでjsonモジュールをインポートしhelp(モジュール.メソッド名)方式で得られたjson解釈結果
json load loads jump jumps
1、json.dumps()
json.dumps() dict str, dict 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)
Serialize ``obj`` to a JSON formatted ``str``.
If ``skipkeys`` is true then ``dict`` keys that are not basic types
(``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped
instead of raising a ``TypeError``.
If ``ensure_ascii`` is false, then the return value can contain non-ASCII
characters if they appear in strings contained in ``obj``. Otherwise, all
such characters are escaped in JSON strings.
If ``check_circular`` is false, then the circular reference check
for container types will be skipped and a circular reference will
result in an ``OverflowError`` (or worse).
If ``allow_nan`` is false, then it will be a ``ValueError`` to
serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
strict compliance of the JSON specification, instead of using the
JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
level of 0 will only insert newlines. ``None`` is the most compact
representation.
If specified, ``separators`` should be an ``(item_separator, key_separator)``
tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
``(',', ': ')`` otherwise. To get the most compact JSON representation,
you should specify ``(',', ':')`` to eliminate whitespace.
``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.
If *sort_keys* is ``True`` (default: ``False``), then the output of
dictionaries will be sorted by key.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
2、json.loads()
json.loads() str dict。
loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Deserialize ``s`` (a ``str`` instance containing a JSON
document) to a Python object.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders that rely on the
order that the key and value pairs are decoded (for example,
collections.OrderedDict will remember the order of insertion). If
``object_hook`` is also defined, the ``object_pairs_hook`` takes priority.
``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser
for JSON floats (e.g. decimal.Decimal).
``parse_int``, if specified, will be called with the string
of every JSON int to be decoded. By default this is equivalent to
int(num_str). This can be used to use another datatype or parser
for JSON integers (e.g. float).
``parse_constant``, if specified, will be called with one of the
following strings: -Infinity, Infinity, NaN, null, true, false.
This can be used to raise an exception if invalid JSON numbers
are encountered.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg; otherwise ``JSONDecoder`` is used.
The ``encoding`` argument is ignored and deprecated.
3、json.load()
json.load() json 。
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
a JSON document) to a Python object.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders that rely on the
order that the key and value pairs are decoded (for example,
collections.OrderedDict will remember the order of insertion). If
``object_hook`` is also defined, the ``object_pairs_hook`` takes priority.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg; otherwise ``JSONDecoder`` is used.
4、json.dump()
json.dump() dict str, 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)
Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
``.write()``-supporting file-like object).
If ``skipkeys`` is true then ``dict`` keys that are not basic types
(``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped
instead of raising a ``TypeError``.
If ``ensure_ascii`` is false, then the strings written to ``fp`` can
contain non-ASCII characters if they appear in strings contained in
``obj``. Otherwise, all such characters are escaped in JSON strings.
If ``check_circular`` is false, then the circular reference check
for container types will be skipped and a circular reference will
result in an ``OverflowError`` (or worse).
If ``allow_nan`` is false, then it will be a ``ValueError`` to
serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
in strict compliance of the JSON specification, instead of using the
JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
level of 0 will only insert newlines. ``None`` is the most compact
representation.
If specified, ``separators`` should be an ``(item_separator, key_separator)``
tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
``(',', ': ')`` otherwise. To get the most compact JSON representation,
you should specify ``(',', ':')`` to eliminate whitespace.
``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.
If *sort_keys* is ``True`` (default: ``False``), then the output of
dictionaries will be sorted by key.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.