""" json: 1.不是全部的數據類型否能夠序列化,序列化返回結果爲字符串 2.不能屢次對同一文件序列化 3.json數據能夠跨語言 pickle: 1.全部python數據類型均可以序列化,結果爲字節串 2.能夠屢次對同一文件序列化 3.不能跨語言(只python) """
序列化:將內存中的數據,轉換成字節串,用以保存在文件或者網絡傳輸,稱爲序列化過程java
反序列化:從文件中\網絡中獲取的數據,轉換成內存中原來的數據類型,成爲反序列化過程python
""" json模塊 java腳本對象標記語言 把全部的東西都轉換成字符串格式 """ import json # 序列化:將數據轉換爲字符串,用以存儲或者網絡傳輸 # dumps:從內存到內存 res = json.dumps(10) print(res) # "10" # 元組進行json轉換後,會轉換爲列表 res = json.dumps((1, 2, 3)) print(res) # "[1, 2, 3]" lst = json.loads(res) print(type(lst)) # <class 'list'> print(lst) # [1, 2, 3] res = json.dumps([1, 2, 3, 4]) print(res) # "[1, 2, 3, 4]" res = json.dumps({"name":"張三", "age": 20}) print(res) # "{"name": "\u5f20\u4e09", "age": 20}" # set不能轉換成json字符串 # res = json.dumps(set("abc")) # print(res) # TypeError: Object of type 'set' is not JSON serializable # tup1 = (1, 2, 3) # # print(set(tup1)) # res = json.dumps(set(tup1)) # print(res) # dump:從內存到外邊 寫入到文件使用dump # dic = {"name":"張三", "age": 20} # with open("aa.txt", encoding="utf-8", mode="at") as f: # # json.dump([1, 2, 3], f) # 把列表轉換爲json字符串,而後寫入文件 # json.dump(dic, f) # 反序列化:把json字符串轉換成內存中存儲的數據類型,如:列表,字符串,字典 # 元組進行json轉換後,再次反序列化後顯示結果爲:列表 # res = json.dumps((1, 2, 3)) # print(res) # "[1, 2, 3]" # lst = json.loads(res) # print(type(lst)) # <class 'list'> # print(lst) # [1, 2, 3] # 從文件中反序列化 # with open("aa.txt", encoding="utf-8") as f1: # res = json.load(f1) # 不能一次反序列化屢次序列化的數據 # print(type(res)) # print(res) # 內存中寫入數據 with open("json.str", mode="at", encoding="utf-8") as f: f.write(json.dumps([1, 2, 3]) + "\n") f.write(json.dumps({"name":"張三", "age":18}) + "\n") # 從文件中讀取數據,轉換爲內存中存儲的數據類型 with open("json.str", encoding="utf-8") as f1: # res = json.loads(f1.readline().strip()) # print(res) # # res = json.loads(f1.readline().strip()) # print(res) for i in f1: print(json.loads(i.strip()))
""" pickle 序列化:能夠把python的全部數據類型轉換爲字節串, 反序列化:將字節串轉換爲python中的數據類型 經常使用場景:和json同樣,一次性讀取,一次寫入 """ import pickle # 序列化元組 byts = pickle.dumps((1,2,3)) print(byts) # b'\x80\x03K\x01K\x02K\x03\x87q\x00.' # 反序列化元組 res = pickle.loads(byts) print(res) # (1, 2, 3) # 序列化集合 byts = pickle.dumps(set("abc")) print(byts) # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03X\x01\x00\x00\x00cq\x04e\x85q\x05Rq\x06.' # 反序列化集合 res = pickle.loads(byts) print(res) # {'a', 'b', 'c'} # 使用pickle寫入文件 二進制不能指定utf-8編碼 with open("pickle.str", mode="ab") as f: pickle.dump(set("abcd"), f) pickle.dump({"name":"張三", "age":18}, f) with open("pickle.str", mode="rb") as f1: for i in range(2): res = pickle.load(f1) print(res)