python3中pickle存储和读取文件时遇到的问题——TypeError: write() argument must be str, not bytes

Python 读写文件报错如下:

TypeError: write() argument must be str, not bytes

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence

python3中,通过pickle对数据进行存储时,必须用二进制(b)模式读写文件

原因:Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是utf-8。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。

解决方法:

使用二进制写入模式(‘wb’)来开启待操作文件,而不能像原来那样,采用字符写入模式(‘w’)。

同时适配Python3和Python2的方法:

fw = open(filename,'w')修改为: fw = open(filename,'wb')
fr = open(filename,'r') 修改为:fr = open(filename,'rb')

你可能感兴趣的:(python)