在Python 2.5中,我使用以下代码存储数据:
考虑到pickle可能无法打开文件,我开始进行一些研究并发现pickle只是在zlib生成的主要数据块两侧包装了几个字符。然后我尝试将其缩小到zlib的输出并通过zlib.decompress进行解压缩。我的问题在于它读取文件并将"\x04"之类的代码解释为四个字符而不是一个。经过大量测试和搜索,我找不到让pickle加载文件或让python识别这些代码以便我可以将其放入zlib中的方法。
所以我的问题是: 如何使用Python3.1恢复原始数据?
我很想让我的客户安装Python2.5并手动完成,但这是不可能的。
非常感谢您的帮助!
def GLWriter(file_name, string):
import cPickle
import zlib
data = zlib.compress(str(string))
file = open(file_name, 'w')
cPickle.dump(data, file)
它很好地工作了,我能够通过反向处理来读取那些数据。它不需要是安全的,只需要是人眼无法读取的东西。如果我把“test”放进去,然后打开它创建的文件,它看起来像这样:
S'x\x9c+I-.\x01\x00\x04]\x01\xc1'
p1
.
由于种种原因,我们现在被迫使用 Python 3.1,并且我们需要编写一些代码来读取这些数据文件。
Pickle 不再接受字符串输入,因此我不得不使用 "rb" 打开文件。但是当我打开文件并尝试使用 pickle.load(file) 时,出现了以下错误:
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可能无法打开文件,我开始进行一些研究并发现pickle只是在zlib生成的主要数据块两侧包装了几个字符。然后我尝试将其缩小到zlib的输出并通过zlib.decompress进行解压缩。我的问题在于它读取文件并将"\x04"之类的代码解释为四个字符而不是一个。经过大量测试和搜索,我找不到让pickle加载文件或让python识别这些代码以便我可以将其放入zlib中的方法。
所以我的问题是: 如何使用Python3.1恢复原始数据?
我很想让我的客户安装Python2.5并手动完成,但这是不可能的。
非常感谢您的帮助!