先决条件: Pickle模块
null
Python pickle模块用于序列化和反序列化Python对象结构。Python中的任何对象都可以被pickle,以便保存在磁盘上。pickle所做的是在将对象写入文件之前先“序列化”对象。pickle是一种将python对象(list、dict等)转换为字符流的方法。这个想法是,这个字符流包含在另一个python脚本中重建对象所需的所有信息。
# Python3 program to illustrate store # efficiently using pickle module # Module translates an in-memory Python object # into a serialized byte stream—a string of # bytes that can be written to any file-like object. import pickle def storeData(): # initializing data to be stored in db Omkar = { 'key' : 'Omkar' , 'name' : 'Omkar Pathak' , 'age' : 21 , 'pay' : 40000 } Jagdish = { 'key' : 'Jagdish' , 'name' : 'Jagdish Pathak' , 'age' : 50 , 'pay' : 50000 } # database db = {} db[ 'Omkar' ] = Omkar db[ 'Jagdish' ] = Jagdish # Its important to use binary mode dbfile = open ( 'examplePickle' , 'ab' ) # source, destination pickle.dump(db, dbfile) dbfile.close() def loadData(): # for reading also binary mode is important dbfile = open ( 'examplePickle' , 'rb' ) db = pickle.load(dbfile) for keys in db: print (keys, '=>' , db[keys]) dbfile.close() if __name__ = = '__main__' : storeData() loadData() |
输出:
omkarpathak-Inspiron-3542:~/Documents/Python-Programs$ python P60_PickleModule.py Omkar => {'age': 21, 'name': 'Omkar Pathak', 'key': 'Omkar', 'pay': 40000} Jagdish => {'age': 50, 'name': 'Jagdish Pathak', 'key': 'Jagdish', 'pay': 50000}
无锉刀酸洗
# initializing data to be stored in db Omkar = { 'key' : 'Omkar' , 'name' : 'Omkar Pathak' , 'age' : 21 , 'pay' : 40000 } Jagdish = { 'key' : 'Jagdish' , 'name' : 'Jagdish Pathak' , 'age' : 50 , 'pay' : 50000 } # database db = {} db[ 'Omkar' ] = Omkar db[ 'Jagdish' ] = Jagdish # For storing b = pickle.dumps(db) # type(b) gives <class 'bytes'> # For loading myEntry = pickle.loads(b) print (myEntry) |
使用Pickle模块的优点:
- 递归对象(包含自身引用的对象): Pickle跟踪它已经序列化的对象,因此以后对同一对象的引用不会再次序列化。(封送模块为此而中断。)
- 对象共享(在不同位置对同一对象的引用): 这类似于自参照对象;pickle只存储一次对象,并确保所有其他引用都指向主副本。共享对象保持共享,这对于可变对象非常重要。
- 用户定义的类及其实例: Marshal根本不支持这些,但pickle可以透明地保存和恢复类实例。类定义必须是可导入的,并且与存储对象时位于同一个模块中。
本文由 Omkar Pathak .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END