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当作是个字典,按照字典的方式进行操作即可,增删改查亦是如此。