通过示例了解Python酸洗
先决条件:泡菜模块
Python pickle 模块用于序列化和反序列化Python对象结构。 Python中的任何对象都可以腌制,以便保存在磁盘上。 pickle 所做的是它先“序列化”对象,然后再将其写入文件。 Pickling 是一种将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
# For loading
myEntry = pickle.loads(b)
print(myEntry)
使用 Pickle 模块的优点:
- 递归对象(包含对自身的引用的对象): Pickle 会跟踪它已经序列化的对象,因此以后对同一对象的引用不会再次被序列化。 (元帅模块为此中断。)
- 对象共享(在不同地方引用同一个对象):这类似于自引用对象; pickle 将对象存储一次,并确保所有其他引用都指向主副本。共享对象保持共享,这对于可变对象非常重要。
- 用户定义的类及其实例: Marshal 根本不支持这些,但是 pickle 可以透明地保存和恢复类实例。类定义必须是可导入的,并且与存储对象时存在于同一个模块中。