想向txt文件保存一个数组,尝试用pickle,用如下代码
with open(self.filename, 'a') as file:
pickle.dump(list,file,0)
报错 TypeError:must be str, not bytes
网上查到原因为:Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。让改成用二进制方式打开,就是改为'ab'
然而使用二进制打开文件,保存进去的list,也变成了二进制的,打开txt文件完全看不出数组原来的样子了。
应该使用encode去格式化写入:
with open(self.filename, 'ab') as file:
file.write(%a\n".encode() % (self.memory_pattern))