คำถามติดแท็ก pickle

โมดูลการจัดลำดับวัตถุสำหรับ Python ใช้แท็กนี้ร่วมกับแท็ก Python สำหรับคำถามที่เกี่ยวข้องกับการจัดเก็บหรือโหลดวัตถุด้วย Pickle

9
ฉันจะใช้ pickle เพื่อบันทึก dict ได้อย่างไร?
ฉันได้ตรวจสอบข้อมูลที่เอกสารของ Pythonให้มาแล้ว แต่ฉันยังสับสนอยู่เล็กน้อย มีใครบางคนโพสต์โค้ดตัวอย่างที่จะเขียนไฟล์ใหม่จากนั้นใช้ pickle เพื่อถ่ายโอนพจนานุกรมลงไป

8
หลามมัลติโพรเซสซิง PicklingError: ไม่สามารถดอง <type 'function'>
ฉันขอโทษที่ฉันไม่สามารถทำซ้ำข้อผิดพลาดด้วยตัวอย่างที่ง่ายขึ้นและรหัสของฉันซับซ้อนเกินกว่าจะโพสต์ ถ้าฉันรันโปรแกรมใน IPython shell แทนที่จะเป็น Python ปกติสิ่งต่าง ๆ ก็ใช้ได้ดี ฉันค้นหาบันทึกย่อก่อนหน้านี้เกี่ยวกับปัญหานี้ พวกเขาทั้งหมดเกิดจากการใช้พูลเพื่อเรียกใช้ฟังก์ชันที่กำหนดไว้ในฟังก์ชันคลาส แต่นี่ไม่ใช่กรณีสำหรับฉัน Exception in thread Thread-3: Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner self.run() File "/usr/lib64/python2.7/threading.py", line 505, in run self.__target(*self.__args, **self.__kwargs) File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks put(task) PicklingError: Can't pickle &lt;type 'function'&gt;: attribute lookup …

2
ใช้ pickle.dump - TypeError: ต้องเป็น str ไม่ใช่ไบต์
ฉันใช้ 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 &lt;module&gt; storvars(mydict) File "C:/Python26/test18.py", line 14, in storvars pickle.dump(vdict,f,) TypeError: must be str, not …


12
ไม่สามารถเลือก <type 'instancemethod'> เมื่อใช้มัลติโพรเซสซิง Pool.map ()
ฉันพยายามที่จะใช้งานmultiprocessingของPool.map()ฟังก์ชั่นที่จะแบ่งออกงานพร้อมกัน เมื่อฉันใช้รหัสต่อไปนี้มันทำงานได้ดี: import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() อย่างไรก็ตามเมื่อฉันใช้มันในแนวทางเชิงวัตถุมากกว่ามันไม่ทำงาน ข้อความแสดงข้อผิดพลาด: PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed สิ่งนี้เกิดขึ้นเมื่อโปรแกรมหลักของฉันคือ: import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() และต่อไปนี้เป็นsomeClassชั้นเรียนของฉัน: import multiprocessing class someClass(object): def __init__(self): …

9
การจัดเก็บพจนานุกรม Python
ฉันคุ้นเคยกับการนำข้อมูลเข้าและออกจาก Python โดยใช้ไฟล์. csv แต่มีความท้าทายที่ชัดเจนในเรื่องนี้ คำแนะนำเกี่ยวกับวิธีการง่ายๆในการจัดเก็บพจนานุกรม (หรือชุดพจนานุกรม) ในไฟล์ json หรือ pck? ตัวอย่างเช่น: data = {} data ['key1'] = "keyinfo" data ['key2'] = "keyinfo2" ฉันต้องการทราบทั้งวิธีการบันทึกและวิธีโหลดกลับ
198 python  json  dictionary  save  pickle 

10
อินสแตนซ์ของคลาสเป็นอนุกรมกับ JSON
ฉันกำลังพยายามสร้างการแสดงสตริง JSON ของอินสแตนซ์ของชั้นเรียนและมีปัญหา สมมติว่าคลาสนั้นถูกสร้างขึ้นเช่นนี้: class testclass: value1 = "a" value2 = "b" การเรียก json.dumps ทำดังนี้: t = testclass() json.dumps(t) มันล้มเหลวและบอกฉันว่า testclass ไม่ใช่ JSON ต่อเนื่องกันได้ TypeError: &lt;__main__.testclass object at 0x000000000227A400&gt; is not JSON serializable ฉันได้ลองใช้โมดูลดอง: t = testclass() print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL)) และให้ข้อมูลอินสแตนซ์ของคลาส แต่ไม่ใช่เนื้อหาที่ต่อเนื่องกันของอินสแตนซ์ของคลาส b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.' ผมทำอะไรผิดหรือเปล่า?

18
มัลติโพรเซสซิง: วิธีใช้ Pool.map กับฟังก์ชั่นที่กำหนดในคลาสได้อย่างไร?
เมื่อฉันเรียกใช้บางสิ่งเช่น: from multiprocessing import Pool p = Pool(5) def f(x): return x*x p.map(f, [1,2,3]) มันใช้งานได้ดี อย่างไรก็ตามการวางสิ่งนี้เป็นฟังก์ชันของคลาส: class calculate(object): def run(self): def f(x): return x*x p = Pool() return p.map(f, [1,2,3]) cl = calculate() print cl.run() ทำให้ฉันมีข้อผิดพลาดต่อไปนี้: Exception in thread Thread-1: Traceback (most recent call last): File "/sw/lib/python2.6/threading.py", line 532, in …

7
ความไม่ลงรอยกันของดองของอาร์เรย์ numpy ระหว่าง Python 2 และ 3
ฉันพยายามที่จะโหลดชุด MNIST ที่เชื่อมโยงที่นี่ในหลาม 3.2 ใช้โปรแกรมนี้: import pickle import gzip import numpy with gzip.open('mnist.pkl.gz', 'rb') as f: l = list(pickle.load(f)) print(l) น่าเสียดายที่มันทำให้ฉันมีข้อผิดพลาด: Traceback (most recent call last): File "mnist.py", line 7, in &lt;module&gt; train_set, valid_set, test_set = pickle.load(f) UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in …


2
การปลดวัตถุ python 2 ด้วย python 3
ฉันสงสัยว่ามีวิธีโหลดวัตถุที่ถูกดองใน Python 2.4 ด้วย Python 3.4 หรือไม่ ฉันใช้ 2to3 กับรหัสเดิมของ บริษัท เป็นจำนวนมากเพื่ออัปเดตให้เป็นปัจจุบัน เมื่อทำสิ่งนี้เสร็จแล้วเมื่อเรียกใช้ไฟล์ฉันได้รับข้อผิดพลาดต่อไปนี้: File "H:\fixers - 3.4\addressfixer - 3.4\trunk\lib\address\address_generic.py" , line 382, in read_ref_files d = pickle.load(open(mshelffile, 'rb')) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128) เมื่อมองไปที่วัตถุดองในการโต้แย้งมันเป็นdictใน a dictที่มีคีย์และค่าประเภทstrที่มีคีย์และค่าประเภท คำถามของฉันคือ: มีวิธีโหลดวัตถุเดิมที่ดองใน python 2.4 ด้วย …

6
วิธีที่ดีที่สุดในการรักษาอาร์เรย์จำนวนนับบนดิสก์
ฉันกำลังมองหาวิธีที่รวดเร็วในการรักษาอาร์เรย์จำนวนมาก ฉันต้องการบันทึกลงในดิสก์ในรูปแบบไบนารีจากนั้นอ่านกลับเข้าไปในหน่วยความจำค่อนข้างเร็ว cPickle ไม่เร็วพอน่าเสียดาย ผมพบว่าnumpy.savezและnumpy.load แต่สิ่งที่แปลกคือ numpy.load โหลดไฟล์ npy ลงใน "memory-map" นั่นหมายความว่าการจัดการอาร์เรย์ปกติจะช้ามาก ตัวอย่างเช่นสิ่งนี้จะช้ามาก: #!/usr/bin/python import numpy as np; import time; from tempfile import TemporaryFile n = 10000000; a = np.arange(n) b = np.arange(n) * 10 c = np.arange(n) * -0.5 file = TemporaryFile() np.savez(file,a = a, b = b, c …

7
การบันทึกและการโหลดวัตถุและการใช้ดอง
ฉันกำลังพยายามบันทึกและโหลดวัตถุโดยใช้pickleโมดูล ก่อนอื่นฉันประกาศวัตถุของฉัน: &gt;&gt;&gt; class Fruits:pass ... &gt;&gt;&gt; banana = Fruits() &gt;&gt;&gt; banana.color = 'yellow' &gt;&gt;&gt; banana.value = 30 หลังจากนั้นฉันเปิดไฟล์ชื่อ 'Fruits.obj' (ก่อนหน้านี้ฉันสร้างไฟล์. txt ใหม่และฉันเปลี่ยนชื่อ 'Fruits.obj'): &gt;&gt;&gt; import pickle &gt;&gt;&gt; filehandler = open(b"Fruits.obj","wb") &gt;&gt;&gt; pickle.dump(banana,filehandler) หลังจากทำสิ่งนี้ฉันปิดเซสชันของฉันและฉันเริ่มต้นใหม่และฉันใส่ครั้งต่อไป (พยายามเข้าถึงวัตถุที่ควรจะบันทึก): file = open("Fruits.obj",'r') object_file = pickle.load(file) แต่ฉันมีข้อความนี้: Traceback (most recent call last): File "&lt;stdin&gt;", line …
115 python  object  pickle 

7
เหตุใดฉันจึงได้รับ“ Pickle - EOFError: Ran out of input” อ่านไฟล์เปล่า
ฉันได้รับข้อผิดพลาดที่น่าสนใจขณะพยายามใช้Unpickler.load()นี่คือซอร์สโค้ด: open(target, 'a').close() scores = {}; with open(target, "rb") as file: unpickler = pickle.Unpickler(file); scores = unpickler.load(); if not isinstance(scores, dict): scores = {}; นี่คือการย้อนกลับ: Traceback (most recent call last): File "G:\python\pendu\user_test.py", line 3, in &lt;module&gt;: save_user_points("Magix", 30); File "G:\python\pendu\user.py", line 22, in save_user_points: scores = unpickler.load(); EOFError: Ran out …
115 python  file  pickle 

7
Pickle หรือ json?
ฉันต้องการที่จะบันทึกลงดิสก์น้อยdictวัตถุที่มีคีย์เป็นประเภทstrและค่านิยมที่มีints แล้วกู้คืนได้ สิ่งนี้: {'juanjo': 2, 'pedro':99, 'other': 333} ตัวเลือกที่ดีที่สุดคืออะไรและทำไม? Serialize ด้วยpickleหรือด้วยsimplejson? ฉันใช้ Python 2.6
114 python  json  pickle 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.