• 机器学习实战:决策树的存储读写文件报错(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
    返回文件名

     

  • 相关阅读:
    HDU
    hdu-1260 tickets
    hdu-1024 Max Sum Plus Plus
    spfa+链式前向星模板
    kafka-伪集群搭建
    elasticsearch-安装-centos7- es7.5 搭建
    elk-安装 通过docker
    kibana-安装-通过docker
    logstash -grok插件语法介绍
    docker 启动redis/nginx
  • 原文地址:https://www.cnblogs.com/huiAlex/p/8855810.html
Copyright © 2020-2023  润新知