Pickle: TypeError: a bytes-like object is required, not 'str' [duplicate]

依然范特西╮ 提交于 2019-12-04 22:19:58

You need to open the file in binary mode:

file = open(fname, 'rb')
response = pickle.load(file)
file.close()

And when writing:

file = open(fname, 'wb')
pickle.dump(response, file)
file.close()

As an aside, you should use with to handle opening/closing files:

When reading:

with open(fname, 'rb') as file:
    response = pickle.load(file)

And when writing:

with open(fname, 'wb') as file:
    pickle.dump(response, file)

In Python 3 you need to specifically call either 'rb' or 'wb'.

with open('C:\Users\Dorien Xia\Desktop\Pokemon-Go-Bot-Working-Hack-API-master\pgoapi\pgoapi.py', 'rb') as file:
    data = pickle.load(file)

You need to change 'str' to 'bytes'. Try this:

class StrToBytes:
    def __init__(self, fileobj):
        self.fileobj = fileobj
    def read(self, size):
        return self.fileobj.read(size).encode()
    def readline(self, size=-1):
        return self.fileobj.readline(size).encode()

with open(fname, 'r') as f:
    obj = pickle.load(StrToBytes(f))

I keep coming back to this stack overflow link, so I'm posting the real answer for the next time I come looking for it:

PickleDB is messed up and needs to be fixed.

Line 201 of pickledb.py

From:

simplejson.dump(self.db, open(self.loco, 'wb'))

to:

simplejson.dump(self.db, open(self.loco, 'wt'))

Problem solved forever.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!