[英]Python pickling error: TypeError: object pickle not returning list. Issue with numpy?
[英]Python Pickle, Loading Issue when returning to list
我正在使用pickle序列化对象列表,加密序列化的字符串,然后使用pickle将其转储到文件中,以便以后可以反向读取。 我了解这可能是一种处理方式,但是从理论上讲,我似乎无法理解为什么在重新加载数据时仍然会失败。 首先,我有一天会为我的可怕命名约定道歉,这些约定会有所改善。
我已经将以下代码转储了,该错误仅在将数据加载回列表中的最后一刻才发生,并因以下错误而失败:
Traceback (most recent call last):
File "servertest.py", line 453, in <module>
mylist = mary1.ReadFromFile()
File "servertest.py", line 142, in ReadFromFile
mrylist = pickle.loads(datastring)
File "C:\Python27\lib\pickle.py", line 1388, in loads
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 864, in load
dispatch[key](self)
KeyError: '\xa7'
在调用写入和读取功能时,我已经在每个步骤中打印出了数据,这似乎很好:
这是原始数据
]q ((c__main__
User
q☺oq☻}q♥(U☻idq♦U♦daveq♣U♥pinq♠U☻22qub(h☺o}q (h♦U♦maryq
h♠U♥434q♂ube.
这是加密数据
'▼ES╬NZ┴w▲sæô▄Hó^┴☻½K◄6►ëΘ░¡√╡▼/ⁿ♀*a]ì╡
5åα¬δ⌡D╓£o¶α{ô √■♣í♠.|H^E«√☼Hwñ/cúw╠Σ√↔↔╞╞┼3
这是enc数据
'▼ES╬NZ┴w▲sæô▄Hó^┴☻½K◄6►ëΘ░¡√╡▼/ⁿ♀*a]ì╡
5åα¬δ⌡D╓£o¶α{ô √■♣í♠.|H^E«√☼Hwñ/cúw╠Σ√↔↔╞╞┼3
未加密的数据
]q ((c__main__
User
q☺oq☻}q♥(U☻idq♦U♦daveq♣U♥pinq♠U☻22qub(h☺o}q (h♦U♦maryq
h♠U♥434q♂ube.
下面显示了我正在使用的两个函数:
def WriteToFile(self, mrlist):
self.mrlist = mrlist
rawdata = pickle.dumps(mrlist, 1)
#print 'rawdata1\n' + rawdata
#encrypt pickled list (call on my encryption functions)
encrydata = self.encryptmessage.EncrMsg(rawdata)
print('this is encrypt data \n ' + encrydata)
#Open and dump encrypted string to file
file=open(self.fn,"wb")
pickle.dump(encrydata, file, 1)
file.close()
#Function to call when reading the file
def ReadFromFile(self):
mrylist = []
#open file and load
file = open(self.fn, "rb")
encdata = pickle.load(file)
file.close
print('this is enc data*********\n ' + encdata)
#Decrypt the string
datastring = self.encrytmessage.DeCryptMsh(encdata)
print 'unencrypted data' + datastring
mrylist = pickle.loads(datastring)
return mrylist`
编辑:以下显示了那些有兴趣查看列表包含内容的用户的简单用户类:
class User:
def __init__(self, id, pin):
self.id = id
self.pin = pin
def getpair(self):
return ' %s " | " %s ' % (self.id, self.pin)
def edit_pin(self, pin1):
self.pin = pin1
解决方案我设法进行了排序,我的原始方法运行良好,实际上,泡菜根本不是问题。 看来,调用解密函数时的初始化向量与最初加密时的初始化向量不同。 解密发生时,它仍然产生相同的字符串,但必须包含一些我看不到的差异。 我重写了ReadWrite类,以使用读写功能,而不是使用pickle将序列化/加密的列表转储到文件中。 我也已经开始将IV写入外部,以便下次程序加载时可以通过解密方法读取它。 感谢您提供的任何帮助和建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.