1. 程式人生 > >python3 中pickle.load TypeError: a bytes-like object is required, not 'str'

python3 中pickle.load TypeError: a bytes-like object is required, not 'str'

bug原因:Python2 和 3 的字串相容問題,資料檔案是在Python2下是序列化的,所以使用Python3讀取時,需要將‘str’轉化為'bytes'。

 

Python2 中的寫法:

# 獲取漢字label對映表
def get_label_dict():
    f=open('chinese_labels','r')
    label_dict = pickle.load(f)
    f.close()
    return label_dict

 

Python3 中的寫法:

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()



# 獲取漢字label對映表
def get_label_dict():
    with open('chinese_labels', 'r') as f:
    	label_dict = pickle.load(StrToBytes(f))
    return label_dict