পাইথন ডক্স যে তথ্য দেয় তা আমি দেখেছি তবে আমি এখনও কিছুটা বিভ্রান্ত। কেউ কি নমুনা কোড পোস্ট করতে পারে যা একটি নতুন ফাইল লিখতে পারে তবে এর মধ্যে ডিকশনারি ফেলে দেওয়ার জন্য আচার ব্যবহার করতে পারে?
পাইথন ডক্স যে তথ্য দেয় তা আমি দেখেছি তবে আমি এখনও কিছুটা বিভ্রান্ত। কেউ কি নমুনা কোড পোস্ট করতে পারে যা একটি নতুন ফাইল লিখতে পারে তবে এর মধ্যে ডিকশনারি ফেলে দেওয়ার জন্য আচার ব্যবহার করতে পারে?
উত্তর:
এটা চেষ্টা কর:
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
print a == b
pickle.HIGHEST_PROTOCOL
?
__slots__
)। আমি বলছি না যে আপনার সর্বদা ব্যবহার করা উচিত HIGHEST_PROTOCOL
, তবে আপনি প্রোটোকল 0 বা 1 ব্যবহার করবেন না তা নিশ্চিত করা আসলেই গুরুত্বপূর্ণ।
pickle.HIGHEST_PROTOCOL
আসলে কি?
import pickle
your_data = {'foo': 'bar'}
# Store data (serialize)
with open('filename.pickle', 'wb') as handle:
pickle.dump(your_data, handle, protocol=pickle.HIGHEST_PROTOCOL)
# Load data (deserialize)
with open('filename.pickle', 'rb') as handle:
unserialized_data = pickle.load(handle)
print(your_data == unserialized_data)
এর সুবিধাটি HIGHEST_PROTOCOL
হ'ল ফাইলগুলি আরও ছোট হয়। এটি মাঝে মধ্যে আনপিকলিং খুব দ্রুত করে তোলে।
গুরুত্বপূর্ণ বিজ্ঞপ্তি : আচার সর্বোচ্চ ফাইলের আকার প্রায় 2 জিবি।
import mpu
your_data = {'foo': 'bar'}
mpu.io.write('filename.pickle', data)
unserialized_data = mpu.io.read('filename.pickle')
আপনার প্রয়োগের জন্য, নিম্নলিখিতগুলি গুরুত্বপূর্ণ হতে পারে:
আরও দেখুন: ডেটা সিরিয়ালাইজেশন ফর্ম্যাটগুলির তুলনা
আপনি যদি কনফিগারেশন ফাইলগুলি তৈরির পরিবর্তে কোনও উপায় সন্ধান করছেন, আপনি পাইথনে আমার সংক্ষিপ্ত নিবন্ধ কনফিগারেশন ফাইলগুলি পড়তে চাইতে পারেন
# Save a dictionary into a pickle file.
import pickle
favorite_color = {"lion": "yellow", "kitty": "red"} # create a dictionary
pickle.dump(favorite_color, open("save.p", "wb")) # save it into a file named save.p
# -------------------------------------------------------------
# Load the dictionary back from the pickle file.
import pickle
favorite_color = pickle.load(open("save.p", "rb"))
# favorite_color is now {"lion": "yellow", "kitty": "red"}
সাধারণভাবে, পিকিং dict
ব্যর্থ হবে যদি না আপনার কাছে স্ট্রিং এবং পূর্ণসংখ্যার মতো কেবল সাধারণ বস্তু থাকে।
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())
<type 'dict'>
>>> import pickle
>>> pik = pickle.dumps(globals())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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
>>>
এমনকি সত্যই সরল dict
প্রায়শই ব্যর্থ হয়। এটি কেবল বিষয়বস্তুর উপর নির্ভর করে।
>>> d = {'x': lambda x:x}
>>> pik = pickle.dumps(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 <function <lambda> at 0x102178668>: it's not found as __main__.<lambda>
তবে, আপনি যদি আরও ভাল সিরিয়ালাইজার ব্যবহার করেন dill
বা cloudpickle
, তারপরে বেশিরভাগ অভিধান বেছে নেওয়া যেতে পারে:
>>> import dill
>>> pik = dill.dumps(d)
অথবা আপনি যদি dict
কোনও ফাইলের মধ্যে সংরক্ষণ করতে চান ...
>>> with open('save.pik', 'w') as f:
... dill.dump(globals(), f)
...
পরবর্তী উদাহরণটি এখানে পোস্ট করা অন্যান্য ভাল উত্তরের সাথে একরকম (যা ভালভাবে বিষয়বস্তুগুলির পিকলেবিলিটি অবহেলা করা বাদ দেয় dict
)।
>>> import pickle
>>> with open("/tmp/picklefile", "wb") as f:
... pickle.dump({}, f)
...
সাধারণত সিপিক্ল বাস্তবায়ন ব্যবহার করা ভাল
>>> import cPickle as pickle
>>> help(pickle.dump)
Help on built-in function dump in module cPickle:
dump(...)
dump(obj, file, protocol=0) -- Write an object in pickle format to the given file.
See the Pickler docstring for the meaning of optional argument proto.
আপনি যদি কেবল একটি একক ফাইলে ডিকটি সঞ্চয় করতে চান তবে এটির pickle
মতো ব্যবহার করুন
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
আপনি যদি ক্যাচিংয়ের জন্য একাধিক ফাইলে একাধিক অভিধান সংরক্ষণ এবং পুনরুদ্ধার করতে চান এবং আরও জটিল ডেটা সঞ্চয় করতে চান তবে যে কোনও ক্যাশ ব্যবহার করুন । এটি আপনার আশেপাশের অন্যান্য সমস্ত জিনিসগুলি করেpickle
from anycache import anycache
@anycache(cachedir='path/to/files')
def myfunc(hello):
return {'hello', hello}
অ্যানিচি ক্যাশে myfunc
বিভিন্ন ফাইলগুলিতে যুক্তির উপর নির্ভর করে বিভিন্ন ফলাফল সঞ্চয় করে cachedir
এবং তাদের পুনরায় লোড করে।
আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন ।
একটি পাইচার ফাইলে পাইথন ডেটা (উদাহরণস্বরূপ অভিধান) ডাম্প করার সহজ উপায়।
import pickle
your_dictionary = {}
pickle.dump(your_dictionary, open('pickle_file_name.p', 'wb'))
import pickle
dictobj = {'Jack' : 123, 'John' : 456}
filename = "/foldername/filestore"
fileobj = open(filename, 'wb')
pickle.dump(dictobj, fileobj)
fileobj.close()
আমি পিকিং বিভ্রান্তি পেয়েছি (সম্ভবত আমি মোটা কারণ)। আমি দেখতে পেয়েছি যে এটি কাজ করে:
myDictionaryString=str(myDictionary)
যা আপনি তারপর একটি পাঠ্য ফাইলে লিখতে পারেন। আমি ড্যাড ফাইলে পূর্ণসংখ্যা লিখতে বলায় ত্রুটি হচ্ছিল বলে আমি আচার ব্যবহারের চেষ্টা ছেড়ে দিয়েছি। আমি আচার ব্যবহার না করার জন্য ক্ষমা চাইছি।
dict
অবজেক্টের আরও গভীরতা থাকতে পারে (যা কেবলমাত্র মুদ্রিত হতে পারে নাম) এবং / অথবা কোনও বা সম্পূর্ণ স্ট্রিং প্রতিনিধিত্ব ছাড়াই অবজেক্টগুলি।