• 文件读写’r'和’rb’区别



    2012年08月22日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 小 中 大 ⁄ 评论关闭
    不管何种语言在进行文件读写时,大家都知道有以下模式:

    r,rb,w,wb

    那么在读写文件时,有无b标识的的主要区别在哪里呢?

    1.文件使用方式标识

        'r':默认值,表示从文件读取数据。
        'w':表示要向文件写入数据,并截断以前的内容
        'a':表示要向文件写入数据,添加到当前内容尾部
        'r+':表示对文件进行可读写操作(删除以前的所有数据)
        'r+a':表示对文件可进行读写操作(添加到当前文件尾部)
        'b':表示要读写二进制数据

    2.读文件

    进行读文件操作时,直到读到文档结束符(EOF)才算读取到文件最后,Python会认为字节x1A(26)转换成的字符为文档结束符(EOF),故使用'r'进行读取二进制文件时,可能会出现文档读取不全的现象。

      举例如下:
         二进制文件中存在如下从低位向高位排列的数据:7F 32 1A 2F 3D 2C 12 2E 76
         如果使用'r'进行读取,则读到第三个字节,即认为文件结束。
         如果使用'rb'按照二进制位进行读取的,不会将读取的字节转换成字符,从而避免了上面的错误。

      解决方案:
         二进制文件就用二进制方法读取'rb'

      总结:
         使用'r'的时候,如果碰到'0x1A',就视为文件结束,就是EOF。使用'rb'则不存在这个问题,
    即:如果你用二进制写入再用文件读出的话,如果其中存在'0x1A',就只会读出文件的一部分,
    使用'rb'会一直读取文件末尾。

    3.写文件

    对于字符串x='abc def',我们可用len(x)得到它的长度为7, 我们称之为换行符,实际上是0x0A。当我们用'w'即文本方式写的时候,在windows平台上会自动将'0x0A'变成两个字符'0x0D','0x0A',即文件长度实际上变成8。当用'r'文本方式读取时,又自动的转换成原来的换行符。

    如果换成'wb'二进制方式来写的话,则会保持一个字符不变,读取的时候也是原样读取。

    所以如果用文本方式写入,用二进制方式读取的话,就要考虑这多出的一个字节了。'0x0D'也称回车符。

    Linux下不会变,因为linux只使用'0X0A'来表示换行。

    原文:http://www.xuebuyuan.com/367184.html

  • 相关阅读:
    机器学习入门之二:一个故事说明什么是机器学习(转载)
    机器学习入门之一:背景介绍(转载)
    python 读取CSV文件 中文乱码
    如何快速学习一门新技术(转载)
    Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)
    oracle单实例12.2.0.1安装
    PRVF-0002 : could not retrieve local node name
    图形化升级单机oracle 11.2.0.4 到 12.2.0.1
    ORA-00845: MEMORY_TARGET not supported on this system
    行转列、列转行
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9054856.html
Copyright © 2020-2023  润新知