欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python学习 :json、pickle&shelve 模块

程序员文章站 2023-04-08 14:26:57
数据交换格式 json 模块 json (JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 json 是JavaScript的一个子集,但 json 是独立于语言的文本格式,并且采用了类似C语言家族的一些习惯 json 建构于两种结 ......

数据交换格式

json 模块

json (javascript object notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 json 是javascript的一个子集,但 json 是独立于语言的文本格式,并且采用了类似c语言家族的一些习惯

 

json 建构于两种结构基础之上:

1、'名称/值'对的集合。在不同的语言中,它被理解为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list)或者关联数组(associative array)

2、值的有序列表(an ordered list of values)。在某些语言中,它被理解为数组(array),类似于python中的类表

 

json 模块的主要功能:

1、序列化:encoding,把一个python对象编码转化成json字符串

2、反序列化:decoding,把json格式字符串解码转换为python数据对象

 

序列化的两种方法

# dumps 方法
import json
dic = {'name':'alex','age':'25'}
data = json.dumps(dic)
f = open('test','w')
f.write(data)
f.close()

# dump 方法
import json
dic = {'name':'mike','age':'20'}
f = open('test','a')
json.dump(dic,f) # 不用再手动去写入文件中
f.close()

 

反序列化的两种方法

# loads 方法
import json
f = open('test','r')
data = f.read()  # 在json文件中的并不是字典,而是json的一种字符串格式
data = json.loads(data)  # 把json数据重新转换成为字典类型
print(data['name'])

# load 方法
import json
f = open('test','r')
a = json.load(f)  # 不用手动去read json中的数据
print(a['name'])

 

pickle 模块

对于类和函数对象,json不能进行序列化,可以使用 pickle 模块来进行相应的操作

pickle 模块只能用于python中,不同版本的python可能彼此都不兼容,因此,只能用pickle保存那些不重要的数据

 

pickle 写入方式:

import pickle

def foo():
    print('hello world!')

data = pickle.dumps(foo)
f = open('test1','wb')
f.write(data)
f.close()

 

pickle 的读取方式与 json 模块一致,同为 dump ,dumps 函数

 

shelve 模块

shelve 模块是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化

 

shelve 使用方式:

import shelve

with shelve.open("shelve_test") as f:
    f["name"] = 'alex'
    f["age"] = '25'
# 这里直接保存到了文件中,生成了3个文件shelve_test.bak,shelve_test.dat,shelve_test.dir

with shelve.open('shelve_test') as f:  # 只使用shelvefile名字即可
    print(f["name"])

    for key, value in f.items():
        print(key, ': ', value)
 >>> alex
     age :  25
     name :  alex