अचार का उपयोग करना


242

मैं python3.3 का उपयोग कर रहा हूं और एक सरल शब्दकोश को चुनने की कोशिश करते समय मुझे एक गुप्त त्रुटि हो रही है।

यहाँ कोड है:

import os
import pickle
from pickle import *
os.chdir('c:/Python26/progfiles/')

def storvars(vdict):      
    f = open('varstor.txt','w')
    pickle.dump(vdict,f,)
    f.close()
    return

mydict = {'name':'john','gender':'male','age':'45'}
storvars(mydict)

और मुझे मिलता है:

Traceback (most recent call last):
  File "C:/Python26/test18.py", line 31, in <module>
    storvars(mydict)
  File "C:/Python26/test18.py", line 14, in storvars
    pickle.dump(vdict,f,)
TypeError: must be str, not bytes

जवाबों:


404

आउटपुट फ़ाइल को बाइनरी मोड में खोला जाना चाहिए:

f = open('varstor.txt','w')

होने की जरूरत:

f = open('varstor.txt','wb')

22
बाद वास्तव में एक ही समस्या में चल रहा है, मैंने देखा कि जहां "बाइनरी" पढ़ने / लिखने के लिए जरूरत होती उल्लेख किया गया था डॉक्स के लिए pickle.dump()और pickle.load()। दोनों स्थानों, यह केवल फ़ंक्शन स्पष्टीकरण के मध्य के पास से गुजरने में उल्लेख किया गया था। किसी को यह स्पष्ट करना चाहिए।
मैथ्यू

9
मैंने पायथन परियोजना के साथ # 24159 दर्ज किया । शायद ऐसा कुछ है जो इस और इसी तरह की स्थितियों में अनुभव को बेहतर बनाने के लिए किया जा सकता है।
जेसन आर। कोम्बस

1
यह लेख पश्चिम बंगाल मोड का उपयोग का उल्लेख नहीं है और यह खोज परिणामों के शीर्ष पर प्रकट होता है और 2019 में लिखा गया था: thoughtco.com/using-pickle-to-save-objects-2813661
deltaray

22

बस एक ही मुद्दा था। पायथन 3 में, बाइनरी मोड्स 'wb', 'rb' को निर्दिष्ट किया जाना चाहिए जबकि पायथन 2x में, इनकी आवश्यकता नहीं है। जब आप पायथन 2x पर आधारित ट्यूटोरियल का अनुसरण करते हैं, तो आप यहाँ हैं।

import pickle

class MyUser(object):
    def __init__(self,name):
        self.name = name

user = MyUser('Peter')

print("Before serialization: ")
print(user.name)
print("------------")
serialized = pickle.dumps(user)
filename = 'serialized.native'

with open(filename,'wb') as file_object:
    file_object.write(serialized)

with open(filename,'rb') as file_object:
    raw_data = file_object.read()

deserialized = pickle.loads(raw_data)


print("Loading from serialized file: ")
user2 = deserialized
print(user2.name)
print("------------")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.