日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python序列化模块json和pickle

發布時間:2025/7/14 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python序列化模块json和pickle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

序列化相關

1. json

  • 應用場景:

json模塊主要用于處理json格式的數據,可以將json格式的數據轉化為python的字典,便于python處理,同時也可以將python的字典或列表等對象轉化為json格式的數據,便于跨平臺或跨語言進行數據交互

  • 功能:

    • Json模塊提供了四個功能:dumps、dump、loads、load

    • Python 編碼為 JSON 類型轉換對應表:

    ? PythonJSON
    dictobject
    list, tuplearray
    strstring
    int, float, int- & float-derived Enumsnumber|
    Truetrue
    Falsefalse
    Nonenull
    • JSON 解碼為 Python 類型轉換對應表:
    JSONPython
    objectdict
    arraylist
    stringstr
    number (int)int
    number(real)float
    trueTrue
    falseFalse
    nullNone
  • 具體應用

    • dumps 和 loads 用于python對象和字符串間的序列化和反序列化

    dumps:將python 基本數據類型轉化為json格式數據類型
    loads:將json格式數據類型轉化為python數據類型

    #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import json s1 = '{"key1":"value1"}' #字符串只能是這個格式的,才能被json轉換 通過loads進行反序列化時,必須使用雙引號 d1 = {'key2':'value2'} s2 = json.loads(s1) #使用loads反序列化 print('s1的內容:',s1) print("s1的類型:",type(s1)) print('s2的內容:',s2) print("s2的類型:",type(s2)) d2 = json.dumps(d1) print('d1的內容:',d1) print("d1的類型:",type(d1)) print('d2的內容:',d2) print("d2的類型",type(d2))

    輸出結果: s1的內容: {"key1":"value1"} s1的類型: <class 'str'> s2的內容: {'key1': 'value1'} s2的類型: <class 'dict'> #經loads處理之后,str變味dict d1的內容: {'key2': 'value2'} d1的類型: <class 'dict'> d2的內容: {"key2": "value2"} d2的類型 <class 'str'> #經dumps處理之后,dict變為str

    ?

    • dump 和load 用于對文件進行序列化和反序列化

    dump:主要用于json文件的讀寫,json.dump(x,f),x是對象,f是一個文件對象,這個方法可以將json字符串寫入到文本文件中
    load:加載json文件

    ``` #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import json s1 = '{"key1":"value1"}' #字符串只能是這個格式的,才能被json轉換 通過loads進行反序列化時,必須使用雙引號 d1 = {'key2':'value2'} json.dump(d1,open('序列化.txt','w')) #將s1序列化,并寫入文件 e1 = json.load(open('序列化.txt','r')) #讀取json文件 print("e1的類型:",type(e1)) print('e1的內容:',e1) ``` 輸出結果: e1的類型: <class 'dict'> e1的內容: {'key2': 'value2'}

    ?

2. pickle

  • 應用場景

pickle模塊實現了基本的數據序列和反序列化,和json的功能類似。
通過pickle模塊的序列化操作我們能夠將程序中運行的對象信息保存到文件中去,永久存儲,也可以簡單的將字符進行序列化
通過pickle模塊的反序列化操作,我們能夠從文件中創建上一次程序保存的對象,也可以將字符進行反序列化。和json不同的是:json 更適合跨語言 可以處理字符串,基本數據類型;pickle python專有,更適合處理復雜類型的序列化

  • 功能
    pikle模塊提供 dumps loads dump load四個基本功能

  • 具體應用

    • dumps 和loads 用于python對象和字符串間的序列化和反序列化

    dumps 和json.dumps功能一樣,但是以字節對象形式返回封裝的對象
    loads和json.loads功能一樣,從字節對象中讀取被封裝的對象,并返回

    #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import pickle s1 = '{"key1":"value1"}' #字符串只能是這個格式的,才能被json轉換 通過loads進行反序列化時,必須使用雙引號 d1 = {'key2':'value2'} s3 = pickle.dumps(s1) print('s1的內容:',s1) print("s1的類型:",type(s1)) print('s3的內容:',s3) print("s3的類型:",type(s3)) d3 = pickle.loads(s3) print('d1的內容:',d1) print("d1的類型:",type(d1)) print('d3的內容:',d3) print("d3的類型",type(d3)) 輸出結果: s1的內容: {"key1":"value1"} s1的類型: <class 'str'> s3的內容: b'\x80\x03X\x11\x00\x00\x00{"key1":"value1"}q\x00.' s3的類型: <class 'bytes'> #dumps處理之后返回的是字節類型 d1的內容: {'key2': 'value2'} d1的類型: <class 'dict'> d3的內容: {"key1":"value1"} d3的類型 <class 'str'>

    ?

    • dump 和load 用于對文件進行序列化和反序列化.python數據持久化用的比較多

      • pickle.dump(obj, file, [,protocol])
          注解:將對象obj保存到文件file中去。
          protocol為序列化使用的協議版本,0:ASCII協議,所序列化的對象使用可打印的ASCII碼表示;1:老式的二進制協議;2:2.3版本引入的新二進制協議,較以前的更高效。其中協議0和1兼容老版本的python。protocol默認值為0。
          file:對象保存到的類文件對象。file必須有write()接口, file可以是一個以'w'方式打開的文件或者一個StringIO對象或者其他任何實現write()接口的對象。如果protocol>=1,文件對象需要是二進制模式打開的。

      • pickle.load(file)
          注解:從file中讀取一個字符串,并將它重構為原來的python對象。
          file:類文件對象,有read()和readline()接口

    #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import json import pickle s1 = '{"key1":"value1"}' #字符串只能是這個格式的,才能被json轉換 通過loads進行反序列化時,必須使用雙引號 d1 = {'key2':'value2'} pickle.dump(s1,open('序列化.txt','wb')) #注意需使用二進制方式寫入文件 e2 = pickle.load(open('序列化.txt','rb')) #需使用二進制方式讀取文件 print("e2的類型:",type(e2)) print('e2的內容:',e2) 輸出結果: e2的類型: <class 'str'> e2的內容: {"key1":"value1"}

    ?

轉載于:https://www.cnblogs.com/fmgao-technology/p/9109617.html

總結

以上是生活随笔為你收集整理的python序列化模块json和pickle的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。