1. 程式人生 > >Python基礎語法 - json & pickle

Python基礎語法 - json & pickle

amp pycharm ext con can 網絡傳輸 不兼容 rmp attr

情景

例1
dic = str({age:18})

f = open(text,w)
f.write(dic)
f.close()

例2
f = open(text,r)
data = f.read()
print(eval(data)[age])

  當我們將內存數據對象存儲到文件中,是無法直接將字典對象存儲,必須轉化為字符串格式str(),當我們通過f.read()方法讀取文件中存儲的字典格式對象時,讀取的也是字符串個是,必須用eval()方法轉化,這種方法很Lou。

用於序列化的兩個模塊

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換

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

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

json模塊

  再上面的情形中,更好的方法是通過Json模塊,因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,並且比XML更快,而且可以直接在Web頁面中讀取,非常方便。

import json

dic = {age:28}

#寫入文件
data = json.dumps(dic)
f = open(text,w)
f.write(data)
f.close()

#讀取文件 f = open(text,r) data = f.read() content = json.loads(data) print(content[age])
  • json無法轉化函數和類

pickle模塊

Pickle的問題和所有其他編程語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關系。

import pickle

def foo():
    print(ok)

#寫入文件
data = pickle.dumps(foo)

f 
= open(text,wb) f.write(data) f.close() #讀取文件 f = open(text,rb) data = f.read() content = pickle.loads(data) content() #Can‘t get attribute ‘foo‘ on <module ‘__main__‘ from ‘C:/Users/LG/PycharmProjects/mystuff/March/day23/json_module.py‘>
  • 註意:寫入模式必須為wb、rb
  • 讀取文件是報錯是由於找不到函數內存地址,所以如果想要讀取時,函數必須在內存地址。

dump & load 方法

1. dump

import json

dic = {age:28}

f = open(text,w)
json.dump(dic,f)
f.close()
  • dump將進行轉化與寫入的過程

2. load

import json

f = open(text,r)
data = json.load(f)
print(data[age])
f.close()
  • load將進行轉化與讀取的過程

Python基礎語法 - json & pickle