📌  相关文章
📜  如何使用 Pickle 在Python保存和加载变量?

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

如何使用 Pickle 在Python保存和加载变量?

序列化是一种用于从任何进程保存对象状态的技术。我们稍后可以通过反序列化使用此状态,以继续该过程。 Pickle 是一个Python模块,可以轻松地序列化或保存变量并在需要时加载它们。与 JSON 序列化不同,Pickle 将对象转换为二进制字符串。 JSON 是特定于文本的,但 Pickle 是特定于Python 的,它可以序列化 JSON 无法序列化的自定义类。由于这个特性,它被大量用于训练机器学习模型。本文讨论如何使用 pickle 在Python保存和加载变量。

使用的功能:

  • 在Python, dumps() 方法用于将变量保存到pickle文件。

句法:

  • 在Python,loads() 用于从腌制文件中加载保存的数据

句法:

保存变量:

  • 方法一:传递变量

在 dumps() 方法中,我们可以传递变量,它会返回同样的二进制字符串。然后我们可以将其传输到其他Python模块或保存在数据库中。

例子:

Python3
import pickle
  
# Create a variable
myvar = [{'This': 'is', 'Example': 1}, 'of',
         'serialisation', ['using', 'pickle']]
  
# Use dumps() to make it serialized
serialized = pickle.dumps(myvar)
  
print(serialized)


Python3
import pickle
  
# Create a variable
myvar = [{'This': 'is', 'Example': 2}, 'of',
         'serialisation', ['using', 'pickle']]
  
# Open a file and use dump()
with open('file.pkl', 'wb') as file:
      
    # A new file will be created
    pickle.dump(myvar, file)


Python3
import pickle
  
# This is the result of previous code
binary_string = b'\x80\x04\x95K\x00\x00\x00\x00\x00\x00\x00]\x94(}\x94(\x8c\x04This\x94\x8c\x02is\x94\x8c\x07Example\x94K\x01u\x8c\x02of\x94\x8c\rserialisation\x94]\x94(\x8c\x05using\x94\x8c\x06pickle\x94ee.'
  
# Use loads to load the variable
myvar = pickle.loads(binary_string)
  
print(myvar)


Python3
import pickle
  
# Open the file in binary mode
with open('file.pkl', 'rb') as file:
      
    # Call load method to deserialze
    myvar = pickle.load(file)
  
    print(myvar)


输出:

  • 方法二:我们可以直接将变量保存在一个文件中。

例子:

蟒蛇3

import pickle
  
# Create a variable
myvar = [{'This': 'is', 'Example': 2}, 'of',
         'serialisation', ['using', 'pickle']]
  
# Open a file and use dump()
with open('file.pkl', 'wb') as file:
      
    # A new file will be created
    pickle.dump(myvar, file)

加载变量:

  • 方法一:

load() 方法接受一个二进制字符串并返回相应的变量。如果字符串无效,它会抛出一个 PickleError。



例子:

蟒蛇3

import pickle
  
# This is the result of previous code
binary_string = b'\x80\x04\x95K\x00\x00\x00\x00\x00\x00\x00]\x94(}\x94(\x8c\x04This\x94\x8c\x02is\x94\x8c\x07Example\x94K\x01u\x8c\x02of\x94\x8c\rserialisation\x94]\x94(\x8c\x05using\x94\x8c\x06pickle\x94ee.'
  
# Use loads to load the variable
myvar = pickle.loads(binary_string)
  
print(myvar)

输出:

  • 方法二:

load() 方法加载一个pickled 文件并返回一个反序列化的变量。

例子:

蟒蛇3

import pickle
  
# Open the file in binary mode
with open('file.pkl', 'rb') as file:
      
    # Call load method to deserialze
    myvar = pickle.load(file)
  
    print(myvar)

输出: