2012-02-25 12 views
6

मैं Python3.2 में बनाए गए डेटा सरणी को डेटा करने का प्रयास कर रहा हूं, इसे उठाएं, और फिर इसे Python2.7 में खोलें। हालांकि, डेटा का कुछ हिस्सा है कि Python2.7 ऑब्जेक्ट कर रहा है, भले ही डेटा के नमूने पर यह ठीक हो, और मैं सोच रहा था कि क्या गलत हो रहा है।प्रोटोकॉल 2 का उपयोग करके पिकलिंग: पायथन 3-> 2 डेटा

Python3.2 में

तो:

import pickle 
with open('c:\\test.pickle', mode='wb') as f: 
    pickle.dump(t_array, f, 2) 

तब, जब Python2.7 में पढ़ने:

import pickle 
f = open('c:\\test.pickle', mode='rb') 
t_data = pickle.load(f) 

त्रुटि है:

File "C:\Python27\lib\pickle.py", line 1378, in load 
    return Unpickler(file).load() 
File "C:\Python27\lib\pickle.py", line 858, in load 
    dispatch[key](self) 
File "C:\Python27\lib\pickle.py", line 1217, in load_build 
    setstate(state) 
TypeError: must be char, not unicode 

डेटा की एक सरणी है डिक्ट्स, दो गहरे में घोंसला, उदाहरण:

{'key3': '3', 'key2': 1.1, 'key1': 1, 'dict': {'dkey2': 2, 'dkey1': 1}} 

क्या (शायद) गलत हो रहा है? क्या मूल (बड़े) डेटासेट में समस्या का कारण बनने का कोई आसान तरीका है?

+0

क्या आप उस डेटा के टेक्स्ट प्रस्तुति के लिए एक लिंक पोस्ट कर सकते हैं जिसे आप डंप कर रहे हैं (माना जाता है कि यह टेक्स्ट के रूप में प्रतिनिधित्व योग्य है)? – Taymon

+0

यह ~ 30 एमबी फ़ाइल है (मसालेदार होने पर), इसलिए मुझे यकीन नहीं है कि यह कितना उपयोगी होगा। यह कारण का भी एक हिस्सा है कि मुझे त्रुटि के विशेष कारण की पहचान करने में कुछ परेशानी क्यों है ... सभी डेटा टेक्स्ट के रूप में प्रतिनिधित्व योग्य है और दिए गए उदाहरण के समान ही है, बस अधिक कुंजी-मूल्य जोड़े के साथ। – cohoz

+0

ठीक है, उदाहरण मेरे लिए काम करता है (हालांकि, ज़ाहिर है, तार यूनिकोड ऑब्जेक्ट्स के रूप में वापस आते हैं)। तो मैं वास्तव में यह नहीं बता सकता कि क्या गलत हो रहा है। – Taymon

उत्तर

2

अचार उतना अच्छा नहीं है जितना दिख सकता है। सुरक्षा भेद्यता और इन तरह के कई मुद्दों।

अपने स्वयं के सहेजने के प्रारूप को बनाने का एक बेहतर विचार है, उदाहरण के लिए जेसन का उपयोग करना।

+0

यह सबसे अच्छा होने वाला है। सुरक्षा यहां कोई मुद्दा नहीं है, और मैं अंत में अधिकांश काम करने के लिए केवल eval() का उपयोग करने में सक्षम था। – cohoz

संबंधित मुद्दे