Pythonv之json模块、pickle模块和shelve模块

json模块

   使用 JSON 函数需要导入 json 库:import json

   JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

   JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

  • json.dumps

   将 Python 对象编码成 JSON 字符串。

  • json.loads

   将已编码的 JSON 字符串解码为 Python 对象。

>>> dic = {'a':123,1:'abc'}
>>> jdic = json.dumps(dic)
>>> print(jdic)
'{"a": 123, "1": "abc"}'    #json字符串

>>> json.loads(jdic)
{'a': 123, '1': 'abc'}    #原对象
  • json.dump

   该函数有两个参数,第一个是待编码Python对象,第二个是文件句柄,用于向该文件写入已编码的JSON字符串。

  • json.load

   该函数只有一个参数,传入文件句柄。直接从该文件中读取内容并解码为Python对象。

>>> f = open('test.txt', 'w+', encoding='utf8')
>>> dic = {'a':123,1:'abc'}
>>> json.dump(dic, f)
>>> f.seek(0)   #将文件指针归到开头
0 
>>> f.read()
'{"a": 123, "1": "abc"}'

>>> f.seek(0)  
0
>>> json.load(f)   #json.load()只能在当前文件指针开始读
{'a': 123, '1': 'abc'}

python 原始类型向 json 类型的转化对照表:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

json 类型转换到 python 的类型对照表:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

pickle模块

   pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

   pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

   pickle序列化后的数据,可读性差,人一般无法识别。

  • pickle.dumps

   将 Python 对象序列化成二进制数据。

  • pickle.loads

   将pickle序列化后的二进制数据反序列成Python对象。

>>> dic = {'a': 123, 1: 'abc'}
>>> pdic = pickle.dumps(dic)
>>> pdic
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K{K\x01X\x03\x00\x00\x00abcq\x02u.'

>>> pickle.loads(pdic)
{'a': 123, 1: 'abc'}
  • pickle.dump

   该函数有两个参数,第一个是待序列化的Python对象,第二个是文件句柄,用于向该文件写入已编码的pickle序列化数据。

  • pickle.load

   该函数只有一个参数,传入文件句柄。直接从该文件中读取内容并反序列化为Python对象。

>>> f=open('test.txt','wb+')   #因为写入的是二进制数据,因此打开模式应该是b模式
>>> dic={'a': 123, 1: 'abc'}
>>> pickle.dump(dic,f)
>>> f.seek(0)
0
>>> f.read()
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K{K\x01X\x03\x00\x00\x00abcq\x02u.'
>>> f.seek(0)
0
>>> pickle.load(f)
{'a': 123, 1: 'abc'}

shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式,是pickle更上一层的封装。

  • shelve.open

   该方法,在当前文件目录中新建三个文件,分别是类型,并返回shelve文件操作句柄。

>>> import shelve
>>> names=['John', 'Jack', 'Lucy','David'] #创建不同的python对象
>>> dic={'a':123, 'b':456}
>>> strs='hello world!'
>>> def funccc():
    print('from funccc')


>>> db = shelve.open('shelvetest')  
>>> db['names']=names  
>>> db['dic']=dic
>>> db['strsss']=strs  #db中的键不要求跟原变量名一致,根据实际需要命名


>>> db['names'] #读取db中的值,根据键 ['John', 'Jack', 'Lucy', 'David'] >>> db['dic'] {'a': 123, 'b': 456} >>> db['strsss'] 'hello world!' >>> db['func']=funccc >>> db['func'] <function funccc at 0x0000000002EC72F0> >>> db['func']() from funccc

可将bd当作是个字典,按照字典的方式进行操作即可,增删改查亦是如此。

猜你喜欢

转载自www.cnblogs.com/chenchaoze/p/9651440.html