Python 3.6使用pickle存储变量遇TypeError错误求助
解决Pickle序列化时的TypeError问题
这个错误在Python 3里挺常见的——pickle模块序列化对象后生成的是字节流,但你用"w"模式打开文件时,文件处于文本模式,只能写入字符串类型数据,这就直接导致了write() argument must be str, not bytes的报错。
核心修正方案:用二进制模式操作文件
只需要把打开文件的模式从"w"改成"wb"(二进制写入模式),就能让文件接收pickle输出的字节数据了。同理,后续读取这个序列化文件时,要对应使用"rb"(二进制读取模式)。
字符串类型变量的修正代码:
import pickle # 字符串类型的Arpan Arpan = "My name is Arpan" # 用wb模式打开文件 fh = open("spdict.data", "wb") pickle.dump(Arpan, fh) fh.close() # 验证读取效果(可选) fh_read = open("spdict.data", "rb") loaded_data = pickle.load(fh_read) print(loaded_data) # 输出:My name is Arpan fh_read.close()
字典类型变量的代码:
import pickle # 字典类型的Arpan Arpan = {"One":1, "Two":2, "Three":3} fh = open("spdict.data", "wb") pickle.dump(Arpan, fh) fh.close() # 验证读取效果(可选) fh_read = open("spdict.data", "rb") loaded_dict = pickle.load(fh_read) print(loaded_dict) # 输出:{'One': 1, 'Two': 2, 'Three': 3} fh_read.close()
另外推荐你使用with语句管理文件,它会自动帮你完成文件关闭操作,避免手动关闭可能遗漏的问题:
import pickle Arpan = "My name is Arpan" # 写入操作 with open("spdict.data", "wb") as fh: pickle.dump(Arpan, fh) # 读取操作 with open("spdict.data", "rb") as fh: loaded_data = pickle.load(fh) print(loaded_data)
内容的提问来源于stack exchange,提问作者Dr. Arpan Mehta
相关产品推荐
相关产品推荐

