【问题标题】:How to pickle and unpickle如何腌制和解封
【发布时间】:2015-10-14 14:18:24
【问题描述】:
import  pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
pickleFile = open("pickle.txt", 'w')
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()

pickleFile = open("pickle.txt", 'r')
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)

print ("variety : ", test, " shape : ", shape)
pickleFile.close()

当我运行上面的代码时,我得到以下错误

line 6, in <module>
pickle.dump(variety, pickleFile)
TypeError: must be str, not bytes

而且我不确定是否可以在变量“测试”中解酸 或者不是因为我已经用变量'variety'腌制了

【问题讨论】:

    标签: python python-3.x pickle


    【解决方案1】:

    根据help(pickle.dump)

    file 参数必须有一个 write() 方法,该方法接受单个 字节参数。因此它可以是为二进制打开的文件对象 写入、io.BytesIO 实例或任何其他满足 这个界面。

    看来您必须以二进制模式打开文件。不要忘记对loading 也这样做。

    import  pickle
    variety = ["sweet", "box", "cat"]
    shape = ["back","spear", "log"]
    pickleFile = open("pickle.txt", 'wb')
    pickle.dump(variety, pickleFile)
    pickle.dump(shape, pickleFile)
    pickleFile.close()
    
    pickleFile = open("pickle.txt", 'rb')
    test = pickle.load(pickleFile)
    shape = pickle.load(pickleFile)
    
    print ("variety : ", test, " shape : ", shape)
    pickleFile.close()
    

    结果:

    variety :  ['sweet', 'box', 'cat']  shape :  ['back', 'spear', 'log']
    

    【讨论】:

      【解决方案2】:

      您的问题是您正在尝试将腌制对象写入文本文件。这就像试图用 MS Word 编写数据库一样。

      腌制文件的正确文件扩展名是“.pkl”。该文件还必须以二进制模式写入和读取。

      我的建议是将文件扩展名更改为“.pkl”,然后使用两个with 循环来整理您的代码。加载和写入的更正就像将'w'更改为'wb'一样简单,结果如下所示:

      import  pickle
      variety = ["sweet", "box", "cat"]
      shape = ["back","spear", "log"]
      with open("pickle.pkl", 'wb') as pickleFile:
          pickle.dump(variety, pickleFile)
          pickle.dump(shape, pickleFile)
          pickleFile.close()
      
      with open("pickle.pkl", 'rb') as pickleFile:
          test = pickle.load(pickleFile)
          shape = pickle.load(pickleFile)
      
      print ("variety : ", test, " shape : ", shape)
      pickleFile.close()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-22
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多