python如果需要将对象存成文件,方便以后(或放在其他地方)使用,可以使用序列化pickle,
参考另一篇随笔:https://www.cnblogs.com/taoshiqian/p/9771786.html
但是一个较大的对象简单序列化成文件,可能会占用很大空间,而此时对象中可能有很多重复信息,完全可以压缩存储
因此,对象->文件:序列化+压缩,文件->对象:解压+反序列化,更省空间
import os, pickle, gzip def save_object_to_zip(objects, filename): if not os.path.exists(filename): file_path = os.path.split(filename)[0] if file_path and not os.path.exists(file_path): # 需要文件夹 os.mkdir(os.path.split(filename)[0]) # 创建文件夹 os.mknod(filename) # 创建文件 fil = gzip.open(filename, 'wb') pickle.dump(objects, fil) fil.close() def load_object_from_zip(filename): fil = gzip.open(filename, 'rb') while True: try: return pickle.load(fil) except EOFError: break fil.close() def test_pickle_and_zip(): L1 = [1, 2, 3, 4, 5] filename = 'L' save_object_to_zip(L1, filename) L2 = load_object_from_zip(filename) print(L2) print(type(L2)) L1 = 8 filename = 'int/L' save_object_to_zip(L1, filename) L2 = load_object_from_zip(filename) print(L2) print(type(L2)) L1 = {'a': 1, 'b': 2} filename = 'dict/L' save_object_to_zip(L1, filename) L2 = load_object_from_zip(filename) print(L2) print(type(L2)) if __name__ == '__main__': test_pickle_and_zip()
#输出 [1, 2, 3, 4, 5] <class 'list'> 8 <class 'int'> {'a': 1, 'b': 2} <class 'dict'>