python序列化模組

來源:互聯網
上載者:User

標籤:類型   new   功能   import   程式   檔案中   false   雙引號   ini   

 #什麼叫序列化模組:#     # 將原本的字典,列表等內容轉換成一個字串的過程就叫做序列化# #序列化的目的:#     #1.以某種儲存形式使自訂對象持久化#     #2.將對象從一個地方傳遞到另外一個地方#     #3.使程式更具維護性.#       #  str>>>> 還原序列化>>>>資料結構#       #  資料結構>>>>序列化>>>>>>>str##     # json#     # json模組提供了四個功能:dumps dump loads load# import json# #  dumps 和 loads# dic = {"k1":"v1","k2":"v2","k3":"v3"}# str_dic = json.dumps(dic)    #  序列化:將一個字典轉換成一個字串# print(type(str_dic),str_dic)   #  <class ‘str‘> {"k1": "v1", "k2": "v2", "k3": "v3"}# # 注意: json轉換完的字串類型的字典中的字串是由""(雙標點)表示## dic2 = json.loads(str_dic)  #  還原序列化:將一個字串格式的字典轉換成一個字典# print(type(dic2),dic2)    # <class ‘dict‘> {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘}# #注意: 用json的loads功能處理的字串類型的字典中的字串必須由""表示## list_dic = [1,[‘a‘,‘b‘,‘c‘],3,{‘k1‘:‘v1‘,‘k2‘:‘v2‘}]# str_dic = json.dumps(list_dic)   #  可以處理嵌套的資料類型# print(type(str_dic),str_dic)    #  <class ‘str‘> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]# list_dic2 = json.loads(str_dic)# print(type(list_dic2),list_dic2)  # <class ‘list‘> [1, [‘a‘, ‘b‘, ‘c‘], 3, {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}]### # dump 和load## f = open(‘json_file‘,‘w‘)# dic4 = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}# json.dump(dic4,f)  #  dump方法接收一個檔案控制代碼,直接將字典轉換成hson字串後寫入檔案# f.close()   #  關閉檔案## f = open(‘json_file‘)# dic5 = json.load(f)  # load方法接收一個檔案控制代碼,直接將檔案中的字串轉換成資料結構返回# f.close()# print(type(dic5),dic5)     #  <class ‘list‘> [1, [‘a‘, ‘b‘, ‘c‘], 3, {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}]#import json#  dumps和dump中ensure_ascii關鍵字# f = open(‘file‘,‘w‘,encoding="utf-8")# json.dump({‘國籍‘:‘中國‘},f)# ret = json.dumps({‘國際‘:‘中國‘})# f.write(ret+"\n")   #  寫入之后里面是位元組碼# f.close()## json.dump({‘國籍‘:‘中國‘},f,ensure_ascii=False)# ret1 = json.dumps({‘國籍‘:‘中國‘},ensure_ascii=False)# f.write(ret1+"\n")    #  寫入之後顯示中文# f.close()#json的格式化輸出# import json# data = {‘username‘:[‘李華‘,‘二愣子‘],‘sex‘:‘male‘,‘age‘:16}# json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(‘,‘,‘:‘),ensure_ascii=False)# print(json_dic2)    # 為了使用者方便看,存入檔案浪費記憶體# 結果:#{#   "age":16,#   "sex":"male",#   "username":[#     "李華",#     "二愣子"#   ]# }#json用法寫的一些注意事項#import json#json格式的限制1,json格式的key必須是字串資料型別#json格式中的字串只能是""(雙引號)#如果是數字為key,那麼dump之後會強行轉成字串資料型別# dic = {1:2,3:4}# str_dic = json.dumps(dic)# print(type(str_dic),str_dic)  # <class ‘str‘> {"1": 2, "3": 4}# new_dic = json.loads(str_dic)# print(type(new_dic),new_dic)  #  <class ‘dict‘> {‘1‘: 2, ‘3‘: 4}# json是否支援元組,對元組做value的字典會把元組強制轉換成列表# dic = {‘abc‘:(1,2,3)}# str_dic = json.dumps(dic)# print(type(str_dic),str_dic) #  <class ‘str‘> {"abc": [1, 2, 3]}  轉成列表# new_dic = json.loads(str_dic)# print(new_dic)  #   {‘abc‘: [1, 2, 3]}  轉換回去value還是列表#json是否支援元組做key,不支援# dic = {(1,2,3):‘abc‘}# str_dic = json.dumps(dic)   #  報錯   鍵必須是str、int、float、bool或None,而不是tuple# 對列表的dump# lst = ["aaa",123,‘bbb‘,4.66]# with open(‘json_demo‘,‘w‘) as f:#     json.dump(lst,f)# with open(‘json_demo‘) as f:#     ret = json.load(f)#     print(ret)  # [‘aaa‘, 123, ‘bbb‘, 4.66]##能不能多次dump資料到檔案裡,可以多次dump到檔案裡但是不能load出來# dic = {‘abc‘:(1,2,3)}# lst = ["avc",123,44,34]# with open(‘json_demo‘,‘w‘) as f:#     json.dump(lst,f)#     json.dump(dic,f)  #  多次dump到檔案# with open(‘json_demo‘) as f:#     ret = json.load(f)   # 報錯#     print(ret)##想dump多個資料進入檔案,用dumps# dic = {‘abc‘:(1,2,3)}# lst = [‘abc‘,123]# with open(‘json_demo‘,‘w‘) as f:#     str_lst = json.dumps(lst)#     str_dic = json.dumps(dic)#     f.write(str_lst+"\n")#     f.write(str_dic+"\n")## with open(‘json_demo‘) as f:#     for line in f:#         ret = json.loads(line)#         print(ret)   #  全部取出# 結果:        #[‘abc‘, 123]        #{‘abc‘: [1, 2, 3]}# 中文格式的 ensure_ascii = False# dic = {‘ac‘:(1,23,3),"國家":"中國"}# ret = json.dumps(dic,ensure_ascii=False)# print(ret)   # {"ac": [1, 23, 3], "國家": "中國"}## dic_new = json.loads(ret)# print(dic_new)  #  {‘ac‘: [1, 23, 3], ‘國家‘: ‘中國‘}# 集合set不能被dump和dumps# pickle模組的四個功能:dumps,dump(序列化,存),loads(還原序列化,讀),load#  pickle可以將python中任意的資料類型序列化#dump的結果是bytes,dump用的f檔案控制代碼需要以‘wb‘的形式開啟,load所用的f是‘rb‘模式讀取#幾乎支援所有資料類的序列化#對於對象的序列化需要這個對象對象的類在記憶體中#對於多次dump\load的操作做了良好的處理#import pickle# dic = {1:(1,2,3),(‘a‘,‘b‘):4}# pic_dic = pickle.dumps(dic)# print(type(pic_dic),pic_dic)   #  <class ‘bytes‘> b‘\x80\x03}q\x00(K\x01K\  bytse類型## new_dic = pickle.loads(pic_dic)# print(new_dic)    # {1: (1, 2, 3), (‘a‘, ‘b‘): 4}#pickle支援幾乎所有對象的# class Student:#     def __init__(self,name,age):#         self.name = name#         self.age = age# alex = Student("alex",40)# ret = pickle.dumps(alex)# print(ret)   # 位元組## pic_ret = pickle.loads(ret)# print(pic_ret)   # <__main__.Student object at 0x0000000002696EB8># print(pic_ret.name)    #alex# print(pic_ret.age)     #  40import pickle# class Student:#     def __init__(self,name,age):#         self.name = name#         self.age = age# alex = Student("alex",80)# with open(‘pickle_demo‘,‘wb‘) as f:#     pickle.dump(alex,f)# with open(‘pickle_demo‘,"rb") as f:#     ret = pickle.load(f)#     print(ret)  #  <__main__.Student object at 0x00000000028A6358>#     print(ret.name)## with open(‘pickle_demo‘,‘wb‘) as f:#     pickle.dump({‘k1‘:‘v1‘},f)#     pickle.dump({‘k2‘:‘v2‘},f)## with open(‘pickle_demo‘,‘rb‘) as f:   #  不能用for迴圈,不知道有多少檔案#     while 1:#         try:#             print(pickle.load(f))#         except EOFError:  # 異常捕獲#             break#結果#  {‘k1‘: ‘v1‘}#  {‘k2‘: ‘v2‘}#shelve 序列化工具只有一個open方法import shelvef = shelve.open(‘shelve_demo‘)f[‘key‘] = {‘k1‘:(1,2,3),‘k2‘:‘v2‘}f.close()f = shelve.open(‘shelve_demo‘)content = f[‘key‘]f.close()print(content)    #  {‘k1‘: (1, 2, 3), ‘k2‘: ‘v2‘}#shelve  如果寫定的一個檔案,改動的比較少,讀取比較多,且大部分讀取都要#基於某個key獲得某個value

  

python序列化模組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.