使用此代碼解壓縮在Python 2.5我存儲的數據:在Python 2.5醃製Unpicking數據,在Python 3.1,然後用zlib的
def GLWriter(file_name, string):
import cPickle
import zlib
data = zlib.compress(str(string))
file = open(file_name, 'w')
cPickle.dump(data, file)
它工作得很好,我能夠做在這一進程中讀取數據相反。它不需要安全,只是人眼看不到的東西。如果我把「測試」了進去,然後打開它創建的文件,它是這樣的:
S'x\x9c+I-.\x01\x00\x04]\x01\xc1'
p1
.
由於各種原因,我們不得不使用Python 3.1,現在,我們需要編寫的東西,可以讀取這些數據文件。
Pickle不再接受字符串輸入,所以我不得不用rb打開文件。當我這樣做,並嘗試與和pickle.load(文件)打開它,我得到這個錯誤:
File "<stdin>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1365, in load
encoding=encoding, errors=errors).load()
UnicodeDecodingError: 'ascii' codec can't decode byte 0x9c in position 1: ordinal not in range(128)
盤算,我可能無法打開泡菜的文件,我開始做一些研究和發現, pickle只是在zlib正在生成的主要數據塊的每一側包裹幾個字符。然後我試着將其修剪爲zlibs輸出,並通過zlib.decompress進行修改。我的問題是它讀取文件並將「\ x04」這樣的喜歡解釋爲四個字符而不是一個字符。大量的測試和搜索後,我找不到一種方法來使醃菜加載文件,或使python識別這些代碼,所以我可以通過zlib。
所以我的問題是這樣的: 如何使用Python3.1恢復原始數據?
我很想問我的客戶安裝Python2.5並手動執行,但這是不可能的。
非常感謝您的協助!
哇,這完美的作品!非常感謝! – 2010-11-26 01:01:33