📜  通过示例了解Python酸洗

📅  最后修改于: 2022-05-13 01:55:32.986000             🧑  作者: Mango

通过示例了解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 模块的优点:

  1. 递归对象(包含对自身的引用的对象): Pickle 会跟踪它已经序列化的对象,因此以后对同一对象的引用不会再次被序列化。 (元帅模块为此中断。)
  2. 对象共享(在不同地方引用同一个对象):这类似于自引用对象; pickle 将对象存储一次,并确保所有其他引用都指向主副本。共享对象保持共享,这对于可变对象非常重要。
  3. 用户定义的类及其实例: Marshal 根本不支持这些,但是 pickle 可以透明地保存和恢复类实例。类定义必须是可导入的,并且与存储对象时存在于同一个模块中。