jsonとpickleの2つのシーケンス化モジュールの詳細


直列化に使用される2つのモジュール
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はどんなタイプのデータを格納できますか?
  • pythonがサポートするすべてのオリジナルタイプ:ブール値、整数、浮動小数点数、複素数、文字列、バイト、None.
  • は、任意のオリジナルタイプからなるリスト、メタグループ、辞書、および集合である.
  • 関数、クラス、クラスのインスタンス
  • Pythonプログラムの実行中にいくつかの文字列、リスト、辞書などのデータを得て、長い間保存したいと思って、便利に後で使用して、簡単にメモリの中で電源を切って電気を切ってデータを失うのではありません.pythonモジュールの大全にある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.