为什么要使用序列化?
我们定义了一个字典:
aDict = dict(url = 'lu & yi.html', content = 'They will be ...')
这里我们把网页 lu & yi.html 作为起始的网页地址,在之后的爬取过程中,将使用新的网页url来替换它。但是当我们关闭工程,重新启动之后,该字典又重新初始化起始网页为lu & yi.html。
我们希望这个字典可以存储起来,而不是不断地被定义、初始化、回收。
什么是序列化?
序列化:把变量从内存中变成可存储或可传输的过程(在Python中叫pickling)。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
如何序列化对象?
- json序列化变量
序列化对象至本地文件:json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
对应的反序列化方法:json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
序列化对象至字符串:json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
对应的反序列化方法:json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
numpy序列化ndarray
序列化array:np.save(file, arr, allow_pickle=True, fix_imports=True)
序列化并压缩:np.savez(file, *args, **kwds)
反序列化array:numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding=’ASCII’)pickle序列化变量
pickle和json一样也是python内置的序列化模块。与json相比,pickle的序列化结果虽然不可读,但其可以直接序列化自定义的对象,甚至连递归存储变量、引用变量都可以序列化,不必再像json一样设计自定义的jsonEncoder,带来了极大便利。
序列化对象至本地:pickle.dump(obj, file, protocol=None, *, fix_imports=True)
对应的反序列化方法:pickle.load(file, *, fix_imports=True, encoding=”ASCII”, errors=”strict”)
*也可以使用dumps,loads将对象序列化为一个字符串
示例
try:
import cPickle as pickle
except ImportError:
import pickle
import json
aDict = dict(url = 'lu & yi.html', content = 'They will be ...')
picklingDat = pickle.dumps(aDict)
print(picklingDat)
print(pickle.loads(picklingDat))
print()
jsonDat = json.dumps(aDict)
print(jsonDat)
print(json.loads(jsonDat))
结果:
b'\x80\x03}q\x00(X\x03\x00\x00\x00urlq\x01X\x0c\x00\x00\x00lu & yi.htmlq\x02X\x07\x00\x00\x00contentq\x03X\x10\x00\x00\x00They will be ...q\x04u.'
{'url': 'lu & yi.html', 'content': 'They will be ...'}
{"url": "lu & yi.html", "content": "They will be ..."}
{'url': 'lu & yi.html', 'content': 'They will be ...'}
[1]https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000
[2]https://blog.csdn.net/brink_compiling/article/details/74781782