序列化模塊
1、什么是序列化、反序列化?
序列:指的就是字串(*****)
序列化:將python或者其他語言的資料型別轉換成字串型別,
python默認資料型別:int、float、str、list、tuple、dict、bool、set
程序:
序列化: 其他資料型別 ---> 字串 ---> 檔案中
反序列化: 檔案中 ---> 字串 ---> 其他資料型別
2、json模塊
json是一個序列化模塊,是一個“第三方”的特殊資料格式
使用json保存資料:
可以將python資料型別 ---> json資料格式 ---> 字串 ---> 檔案中,
其他語言使用pathon資料:
檔案中 ---> 字串 ---> json資料格式 ---> 其他語言的資料型別
為什么要使用json模塊
為了讓不同的語言之間資料可以共享
由于各種語言的資料型別不一,但資料一樣,比如python不能直接使用其他語言的資料型別,必須將其他語言的資料型別轉換成json資料格式,python獲取到json資料之后可以將json轉換成python的資料型別拿來使用
注意:在json中所有的字串都是雙引號
哪些資料型別可以被序列化?
串列、元組、字典都可以,集合set不可以
json.dumps():
- json.dumps(), f = open(), f.write
# 序列化:.dumps()將python資料 ---> json資料格式 ---> 字串
json.loads():
- f = open(), str = f.read(), json.loads(str)
# 反序列化:.loads()字串 ---> json資料格式 ---> python或者其他語言的資料型別
注意:上面兩種方法不會內部不能讀、寫檔案,需要手動寫代碼
例1:使用json模塊存、取串列
# 存串列 import json
list1 = ["bear", "apple", "orange", "李二狗"] # .dumps()將python資料 ---> json資料格式 ---> 字串 json_list1 = json.dumps(list1, ensure_ascii=False) # ensure_ascii將默認的ascii取消設定為False,可以在控制臺看到中文,否則中文顯示為bytes型別資料 print(json_list1) print(type(json_list1)) # 字串型別 # .loads()字串 ---> json資料格式 ---> python資料 list2 = json.loads(json_list1) print(list2) print(type(list2)) # 串列型別
執行結果:
["bear", "apple", "orange", "李二狗"] <class 'str'> ['bear', 'apple', 'orange', '李二狗'] <class 'list'>
例2:使用json模塊存、取元組
# 存元組 import json tuple1 = ("bear", "apple", "orange", "李二狗") json_tuple1 = json.dumps(tuple1, ensure_ascii=False) # ensure_ascii將默認的ascii取消設定為False,可以在控制臺看到中文,否則中文顯示為bytes型別資料 print(json_tuple1) print(type(json_tuple1)) # 字串型別 tuple2 = json.loads(json_tuple1) print(tuple2) print(type(tuple2)) # 串列型別
執行結果:
["bear", "apple", "orange", "李二狗"] <class 'str'> ['bear', 'apple', 'orange', '李二狗'] <class 'list'>
例3:使用json模塊存、取字典
# 存字典 import json dic1 = { "name": "坦克", "age": 18 } json_dic1 = json.dumps(dic1, ensure_ascii=False) print(json_dic1) print(type(json_dic1)) # 字串型別 dic2 = json.loads(json_dic1) print(dic2) print(type(dic2)) # 字典型別
執行結果:
{"name": "坦克", "age": 18}
<class 'str'>
{'name': '坦克', 'age': 18}
<class 'dict'>
案例:寫一個注冊功能,將用戶名密碼存放在字典,然后使用json序列化字典存在本地檔案中
# 注冊功能 import json def register(): username = input("請輸入用戶名>>>: ").strip() password = input("請輸入密碼>>>: ").strip() re_password = input("請再次輸入密碼>>>: ").strip() if re_password == password: user_dict = { "name" : username, "pwd" : password } # 將字典序列化 json_dict = json.dumps(user_dict, ensure_ascii=False) # 開始寫入檔案中 # 注意:保存json資料時,用.json作為檔案的后綴名,讓人見名知意 with open("user.json", "w", encoding="utf-8") as f: f.write(json_dict)
json.dump(): # 序列化:.dumps()將python資料 ---> json資料格式 ---> 字串
- 內部實作f.write
json.load(): # 反序列化:.loads()字串 ---> json資料格式 ---> python或者其他語言的資料型別
- 內部實作f.read()
注意:上面兩種方法可以內部讀、寫檔案,無需再寫讀、寫的代碼(推薦使用)
例:將字典存放到本地json檔案內
# dump,load演示 import json dic2 = { "username": "坦克", "age": 17 } # 寫入資料 with open("user.json", "w", encoding="utf-8") as f1: json.dump(dic2, f1, ensure_ascii=False) # 讀資料 with open("user.json", "r", encoding="utf-8") as f2: dic3 = json.load(f2) print(dic3)
執行結果:
{'username': '坦克', 'age': 17}
3、pickle模塊
pickle是一個python自帶的序列化模塊,
pickle模塊可以存集合,但是里面只能含有字串型別資料
注意:pickle模塊存取資料必須以bytes存入
優點:
可以支持python中所有的資料型別
可以直接存bytes型別的資料
缺點(致命的缺點):
只能支持python使用,不能跨平臺
例:將集合set1寫入以.pickle結尾的檔案
import pickle set1 = {"1", "name", "坦克"}# 檔案以.pickle命名,二進制寫入檔案 with open("user.pickle", "wb") as f1: pickle.dump(set1, f1) # 以二進制讀取檔案 with open("user.pickle", "rb") as f2: set2 = pickle.load(f2) print(set2)
執行結果:
{'坦克', 'name', '1'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/173137.html
標籤:Python
下一篇:collections模塊
