Python基础语法 - json & pickle

情景

例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将进行转化与读取的过程
posted @ 2018-03-23 22:17  皮蛋小顽童  阅读(204)  评论(0编辑  收藏  举报