Hướng dẫn save pickle object python - lưu đối tượng dưa chua python

Pickle, một phần của thư viện Python theo mặc định, là một mô -đun quan trọng bất cứ khi nào bạn cần sự kiên trì giữa các phiên người dùng. Là một mô -đun, Pickle cung cấp cho việc lưu các đối tượng Python giữa các quá trình.

Cho dù bạn & NBSP; đang lập trình cho cơ sở dữ liệu, trò chơi, diễn đàn hoặc một số ứng dụng khác phải lưu thông tin giữa các phiên, Pickle rất hữu ích để lưu các định danh và cài đặt. Mô -đun Pickle có thể lưu trữ những thứ như các loại dữ liệu như booleans, chuỗi và mảng byte, danh sách, từ điển, chức năng, v.v.

Lưu ý: & nbsp; Khái niệm về ngâm còn được gọi là tuần tự hóa, sắp xếp, và & nbsp; làm phẳng. Tuy nhiên, điểm luôn giống nhau để lưu một đối tượng vào một tệp để truy xuất sau. Pickling hoàn thành điều này bằng cách viết đối tượng là một luồng dài byte. & NBSP; The concept of pickling is also known as serialization, marshaling, and flattening. However, the point is always the same—to save an object to a file for later retrieval. Pickling accomplishes this by writing the object as one long stream of bytes. 

Mã ví dụ Pickle trong Python

Để viết một đối tượng vào một tệp, bạn & nbsp; sử dụng mã trong cú pháp sau:

import pickle 
object = Object()
filehandler = open(filename, 'w')
pickle.dump(object, filehandler)

Đây là cách một ví dụ trong thế giới thực & nbsp; trông:

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)

Đoạn trích này ghi nội dung của Object_Pi vào tệp xử lý tệp_pi, từ đó được liên kết với tệp fileName_pi.obj trong thư mục thực thi.

Để khôi phục giá trị của đối tượng vào bộ nhớ, hãy tải đối tượng từ tệp. Giả sử rằng Pickle chưa được nhập khẩu để sử dụng, bắt đầu bằng cách nhập nó:

import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)

Mã sau đây khôi phục giá trị của PI:

import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)

Đối tượng sau đó đã sẵn sàng để sử dụng một lần nữa, lần này là Object_PI2. Tất nhiên, bạn có thể sử dụng lại các tên gốc, nếu bạn thích. Ví dụ này sử dụng tên riêng biệt cho sự rõ ràng.

Những điều cần nhớ về Pickle

Hãy ghi nhớ những điều này khi sử dụng mô -đun Pickle:

  • Giao thức Pickle dành riêng cho Python-nó không được đảm bảo là tương thích với ngôn ngữ chéo. Bạn rất có thể không thể chuyển thông tin để làm cho nó hữu ích trong Perl, PHP, Java hoặc các ngôn ngữ khác.
  • Cũng không có đảm bảo về khả năng tương thích giữa các phiên bản khác nhau của Python. Sự không tương thích tồn tại vì không phải mọi cấu trúc dữ liệu Python đều có thể được tuần tự hóa theo mô -đun.
  • Theo mặc định, phiên bản mới nhất của giao thức Pickle được sử dụng. Nó vẫn theo cách đó trừ khi bạn thay đổi thủ công nó.

Mẹo: & nbsp; cũng tìm ra & nbsp; Cách sử dụng kệ để lưu các đối tượng trong Python & nbsp; cho một phương pháp khác để duy trì tính liên tục của đối tượng. Also find out how to use shelve to save objects in Python for another method of maintaining object continuity.

# Lưu từ điển vào tệp Pickle ..

Python 2.7.9 (default, Dec 11 2014, 01:21:43) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from numpy import *
>>> type(globals())     

>>> import pickle
>>> pik = pickle.dumps(globals())
Traceback (most recent call last):
  File "", line 1, in 
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
    Pickler(file, protocol).dump(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle module objects
>>> 

với Open ('my_filename.pickle', 'wb') dưới dạng tệp:.really simple dict will often fail. It just depends on the contents.

>>> d = {'x': lambda x:x}
>>> pik = pickle.dumps(d)
Traceback (most recent call last):
  File "", line 1, in 
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
    Pickler(file, protocol).dump(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 748, in save_global
    (obj, module, name))
pickle.PicklingError: Can't pickle  at 0x102178668>: it's not found as __main__.

dưa chua. kết xuất (my_dict, tệp, giao thức = pickle.highest_protocol).

>>> import dill
>>> pik = dill.dumps(d)

Bạn có thể từ điển dưa chua?

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 

Chúng ta hãy lấy một từ điển làm ví dụ. Chúng ta có thể sử dụng phương thức pickle.dump () để nối tiếp từ điển và viết nó vào một tệp. Sau đó, chúng ta có thể đọc tệp và tải lại cho một biến.

Nói chung, Pickling A dict sẽ thất bại trừ khi bạn chỉ có các đối tượng đơn giản trong đó, như chuỗi và số nguyên.

Ngay cả một dict thực sự đơn giản cũng sẽ thất bại. Nó chỉ phụ thuộc vào nội dung.

  • Tuy nhiên, nếu bạn sử dụng một serializer tốt hơn như
    import pickle 
    import math
    object_pi = math.pi
    file_pi = open('filename_pi.obj', 'w')
    pickle.dump(object_pi, file_pi)
    0 hoặc
    import pickle 
    import math
    object_pi = math.pi
    file_pi = open('filename_pi.obj', 'w')
    pickle.dump(object_pi, file_pi)
    1, thì hầu hết các từ điển đều có thể được ngâm:

Syntax:

Hoặc nếu bạn muốn lưu dict của mình vào một tập tin ...

  • Ví dụ sau giống hệt với bất kỳ câu trả lời hay nào khác được đăng ở đây (ngoài việc bỏ qua khả năng chọn lọc của nội dung của dict là tốt).

Syntax:

Sê -ri hóa là một kỹ thuật được sử dụng để lưu trạng thái của một đối tượng khỏi bất kỳ quá trình nào. Sau này chúng ta có thể sử dụng trạng thái này bằng cách giải phóng hóa, để tiếp tục quá trình. Pickle là một mô -đun Python giúp dễ dàng tuần tự hóa hoặc lưu các biến và tải chúng khi cần. Không giống như tuần tự hóa JSON, Pickle chuyển đổi đối tượng thành một chuỗi nhị phân. JSON là văn bản cụ thể, nhưng Pickle là Python cụ thể và nó có thể tuần tự hóa các lớp tùy chỉnh mà JSON không thể tuần tự hóa. Do tính năng này, nó được sử dụng rất nhiều trong các mô hình học máy đào tạo. Bài viết này thảo luận về cách các biến có thể được lưu và tải trong Python bằng Pickle.

Các chức năng được sử dụng:

  • Trong Python, phương thức Dumps () được sử dụng để lưu các biến vào tệp Pickle.Passing the variable

pickle.dumps (obj, giao thức = none, *, fix_imports = true, buffer_callback = none)

Example:

Python3

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
4
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
5

Trong Python, tải () được sử dụng để tải dữ liệu đã lưu từ tệp ngâm

import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
9
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
0
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
1
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
2
import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
2
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
4
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
5

pickle.loads (dữ liệu, /, *, fix_imports = true, mã hóa =, ascii, errors = Hồi nghiêm ngặt, bộ đệm = none)

import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
9
Python 2.7.9 (default, Dec 11 2014, 01:21:43) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from numpy import *
>>> type(globals())     

>>> import pickle
>>> pik = pickle.dumps(globals())
Traceback (most recent call last):
  File "", line 1, in 
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
    Pickler(file, protocol).dump(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle module objects
>>> 
0

Output:

Lưu một biến:

  • Phương pháp 1: Truyền biếnWe can directly save the variable in a file itself.

Example:

Python3

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
4
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
5

Trong phương thức Dumps (), chúng ta có thể vượt qua biến và nó sẽ trả lại cho chúng ta chuỗi nhị phân cho cùng. Sau đó, chúng ta có thể truyền nó đến các mô -đun Python khác hoặc lưu trong cơ sở dữ liệu.

import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
9
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
0
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
1
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
2
import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
2
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
4
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
5

>>> import dill
>>> pik = dill.dumps(d)
3
>>> import dill
>>> pik = dill.dumps(d)
4
>>> import dill
>>> pik = dill.dumps(d)
5
>>> import dill
>>> pik = dill.dumps(d)
6
import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
2
>>> import dill
>>> pik = dill.dumps(d)
8
>>> import dill
>>> pik = dill.dumps(d)
9
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
0
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
1

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
2
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
3
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
0
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
5

Tải một biến: & nbsp;

  • Phương pháp 1: & NBSP;

Phương thức tải () lấy một chuỗi nhị phân và trả về biến tương ứng. Nếu chuỗi không hợp lệ, nó sẽ ném PickleError.

Example:

Python3

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
4
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
5

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
8
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
7 dict0dict1

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
6
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
7 dict4

import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
9dict6

Output:

[{’’ Này

  • Phương pháp 2: & NBSP;

Phương thức LOAD () tải một tệp ngâm và trả về một biến khử Dererialized.

Example:

Python3

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
4
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
5

>>> import dill
>>> pik = dill.dumps(d)
3
>>> import dill
>>> pik = dill.dumps(d)
4
>>> import dill
>>> pik = dill.dumps(d)
5
>>> import dill
>>> pik = dill.dumps(d)
6
import pickle 
filehandler = open(filename, 'r')
object = pickle.load(filehandler)
2dict4
>>> import dill
>>> pik = dill.dumps(d)
9
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
0
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
1

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
8
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
7 dict0dict1

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
2
import pickle 
file_pi2 = open('filename_pi.obj', 'r')
object_pi2 = pickle.load(file_pi2)
9dict6

Output:

import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
6
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
7 dict4


[{’’ Này

Phương pháp 2: & NBSP;to save an object to a file for later retrieval.

Phương thức LOAD () tải một tệp ngâm và trả về một biến khử Dererialized.

>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
2
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
6
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
7
import pickle 
import math
object_pi = math.pi
file_pi = open('filename_pi.obj', 'w')
pickle.dump(object_pi, file_pi)
01
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
0
>>> with open('save.pik', 'w') as f:
...   dill.dump(globals(), f)
... 
5use pickle. load() function to do that. The primary argument of pickle load function is the file object that you get by opening the file in read-binary (rb) mode. Simple!

[{’’ Này

Làm thế nào để bạn tiết kiệm mọi thứ với dưa chua?.

Mô -đun Pickle có thể lưu trữ những thứ như các loại dữ liệu như booleans, chuỗi và mảng byte, danh sách, từ điển, chức năng, v.v. Lưu ý: Khái niệm về ngâm còn được gọi là tuần tự hóa, sắp xếp và làm phẳng. Tuy nhiên, điểm luôn giống nhau để lưu một đối tượng vào một tệp để truy xuất sau.

Làm thế nào để bạn tải dữ liệu trong dưa chua?

Tải trọng Python Pickle Bạn phải sử dụng hàm dưa chua () để làm điều đó. Đối số chính của hàm tải Pickle là đối tượng tệp mà bạn nhận được bằng cách mở tệp ở chế độ read nhị phân (RB). Giản dị!

Làm thế nào để tôi lưu một dict trong dưa chua?

Lưu từ điển Python vào một tệp dưa chua.

nhập khẩu dưa chua ..We can use the method pickle. dump() to serialise the dictionary and write it into a file. Then, we can read the file and load it back to a variable.