机器学习实战:决策树的存储读写文件报错(Python3)

错误原因:pickle模块存储的是二进制字节码,需要以二进制的方式进行读写

1. 报错一:TypeError: write() argument must be str, not bytes

将决策树写入磁盘的代码如下:

1 def storeTree(inputTree, filename):
2     import pickle
3     fw = open(filename, 'w')
4     pickle.dump(inputTree, fw)
5     fw.close()

改正后代码: fw = open(filename, 'wb') 

 

2. 报错二:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

读取存储的决策树文件代码如下:

1 def grabTree(filename):
2     import pickle
3     fr = open(filename,'r')
4     return pickle.load(fr)

改正后代码: fr = open(filename,'rb') 


 

一、open()函数

在读取或写入一个文件之前,你必须使用 Python 内置open()函数来打开它。 该函数创建一个文件对象,这将被用来调用与它相关的其他支持方式。

1. 语法

 file object = open(file_name [, access_mode][, buffering]) 

2. 参数信息

  • file_name: 文件名(file_name )参数是包含您要访问的文件名的字符串值。

  • access_mode: access_mode指定该文件已被打开,即读,写,追加等方式。可能值的完整列表,在表中如下。

    这是可选的参数,默认文件访问模式是读(r)。
  • buffering: 如果该缓冲值被设置为0,则表示不使用缓冲。如果该缓冲值是1,则在访问一个文件进行时行缓冲。

    如果指定缓冲值大于1的整数,缓冲使用所指示的缓冲器大小进行。如果是负数,缓冲区大小是系统默认的(默认行为)。

3. 不同的读写模式

模式描述
r打开一个文件为只读。文件指针被放置在文件的开头。这是默认模式。
rb打开一个文件只能以二进制格式读取。文件指针被放置在文件的开头。这是默认模式。
r+打开用于读和写文件。文件指针置于该文件的开头。
rb+打开用于读取和写入二进制格式的文件。文件指针置于该文件的开头。
w打开一个文件只写。如果文件存在覆盖该文件。如果该文件不存在,则创建写入新文件。
wb打开一个文件只能以二进制格式写入。如果文件存在覆盖该文件。如果该文件不存在,则创建写入新文件。
w+打开文件为写入和读取模式。如果文件存在覆盖现有文件。如果该文件不存在,创建用于读写操作的新文件。
wb+打开用于以二进制格式写入和读出文件。如果文件存在覆盖现有文件。如果该文件不存在,创建用于读写操作的新文件。
a打开用于追加的文件。文件指针是在文件是否存在该文件的末尾。也就是说,该文件是在追加模式。如果该文件不存在,它会创建一个用于写入的新文件。
ab打开文件用于二进制格式追加。文件指针是在文件是否存在该文件的末尾。也就是说,文件是在追加模式。 如果该文件不存在,它会创建一个用于写入的新文件。
a+打开文件为追加和读取方式。文件指针是在文件是否存在该文件的末尾。该文件以追加模式打开。如果该文件不存在,它将创建用于读写操作的新文件。
ab+打开一个文件以追加和二进制格式读取模式。如果该文件存在文件指针在该文件的末尾。该文件以追加模式打开。如果该文件不存在,它将创建读写操作的新文件。

4. file的属性

属性描述
file.closed
如果文件被关闭返回true,否则为false
file.mode
返回文件打开访问模式
file.name
返回文件名

 

 

转载于:https://www.cnblogs.com/huiAlex/p/8855810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值